【发布时间】:2013-11-13 16:11:38
【问题描述】:
我们有几个需要维护配置和数据文件的 Windows 8 应用商店 C++ 应用。
文件被写入Windows::Storage::ApplicationData::Current->LocalFolder 的子文件夹中。示例:
C:\Users\<username>\AppData\Local\Packages\<packagename>\LocalState\SubFolder1\SubFolder2\data.txt
在 Windows 8.1 中,我们收到了一些来自用户的报告,称在应用调用之间没有记住状态。仔细检查后,文件没有创建(确实创建了子文件夹,但其中没有文件)
注意事项:
使用
CreateDirectory()创建子文件夹,使用fopen()创建文件使用绝对路径创建/打开文件
这在 Windows 8.0 下始终有效,此后代码未更改。事实上,我们的一份用户报告称,该应用在 Windows 8.0 下可以正常保存文件,但在用户升级到 Windows 8.1 后停止保存。
我们无法使用 Windows 8.1 在本地复制该问题。我们不确定这种故障有多普遍,但我们估计大多数用户都没有受到影响。受影响的用户似乎没有任何特殊的硬件/软件配置。
如果用户受到影响,则文件始终不会保存,即使在重试或卸载并重新安装应用程序之后(即,这不是间歇性故障)
很难获得错误信息,因为 (i) 问题的罕见性 (ii) 显示此问题的日志未保存,以及 (iii) 应用程序不需要互联网连通性,因此没有替代的通信渠道。
谁能想到在 Windows 8.1 下这可能会失败的任何原因?
【问题讨论】:
-
errno/GetLastError()?但是请务必向微软报告,他们仍然有员工关心这种回归。 -
@MSalters:很难获得错误信息,因为 (i) 问题的罕见性 (ii) 显示此问题的日志根据定义未保存,以及 (iii) 应用程序不需要互联网连接,因此没有替代的通信渠道。一种解决方案是专门检测构建以某种方式捕获/报告此错误,但出于相当明显的原因,我对在实时构建中执行此操作犹豫不决:)
-
一个疯狂的猜测:你的文件名是否包含非 ascii 字符?
-
@SigTerm:不,只是标准的 7 位 ASCII。例如:CI3.log、CI3.cfg、CI3.pro
-
@Xaxx:appdata 的路径中是否有非 ascii 字符?我问是因为 CreateDirectory 有 unicode 版本,但 fopen 需要 char。无论如何,在有问题的机器上,您可以使用进程监视器之类的东西来监视呼叫。您可以指示有问题的用户执行此操作并向您发送日志。另外,如果我是你,我会尝试使用 boost 或 Qt 之类的东西从特定于操作系统的调用中抽象出来。这可能行得通。
标签: c++ windows-store-apps windows-8.1 winapp