gpt4 book ai didi

c++ - Windows Store C++ 应用程序无法在 Windows 8.1 下使用 fopen() 创建文件

转载 作者:行者123 更新时间:2023-11-28 07:17:46 24 4
gpt4 key购买 nike

我们有几个 Windows 8 Store C++ 应用程序需要维护配置和数据文件。

文件写入 Windows::Storage::ApplicationData::Current->LocalFolder 的子文件夹中。示例:

C:\Users\<username>\AppData\Local\Packages\<packagename>\LocalState\SubFolder1\SubFolder2\data.txt

在 Windows 8.1 中,我们收到了一些来自用户的报告,称在应用程序调用之间不会记住状态。仔细检查后没有创建文件(确实创建了子文件夹,但其中没有文件)

注意事项:

  1. 子文件夹使用 CreateDirectory() 创建,文件使用 fopen()

  2. 使用绝对路径创建/打开文件

  3. 这始终在 Windows 8.0 下有效,此后代码未更改。事实上,我们的一份用户报告指出该应用程序在 Windows 8.0 下保存文件很好,但在用户升级到 Windows 8.1 后停止保存。

  4. 我们无法使用 Windows 8.1 在本地复制该问题。我们不确定这种故障有多普遍,但我们估计大多数用户不受影响。受影响的用户似乎没有任何特殊的硬件/软件配置。

  5. 如果用户受到影响,则文件始终不会保存,即使在重试或卸载并重新安装应用程序后也是如此(即,这不是间歇性故障的情况)

  6. 很难获得错误信息,因为 (i) 问题的罕见性 (ii) 显示错误的日志根据定义未保存,并且 (iii) 应用程序不需要互联网连通性,因此没有替代的通信 channel 。

谁能想到在 Windows 8.1 下这可能会失败的任何原因?

最佳答案

appdata 路径中是否有非 ascii 字符? CreateDirectory 有 unicode 版本,但 fopen 将 const char* 字符串作为参数。

如果我是你,我会尝试使用 boost 或 Qt 之类的东西从特定于操作系统的调用中抽象出来。这应该可行,因为 Qt 使用 unicode 字符串打开文件,而 Boost 应该有类似的东西(不确定这个)。

Windows 编译器 _wfopen 也可能存在。它与 fopen 相同,但将 wchar_t 字符串作为参数。它应该适合你,但你需要一些 ifdefs

您也可以尝试使用支持 unicode 的函数设置当前目录,然后调用 fopen,但我不会称之为“干净”的解决方案。

无论如何,当你遇到与系统调用相关的问题时,在有问题的机器上你可以使用类似 process monitor 的东西来监控调用。 .您可以指导有问题的用户执行此操作并向您发送日志。

关于c++ - Windows Store C++ 应用程序无法在 Windows 8.1 下使用 fopen() 创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19958747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com