gpt4 book ai didi

c++ - _wfopen_s 在 Windows Phone 应用程序中无法正常工作

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

我需要使用 _wfopen_s 函数打开存储在我的应用程序包中的文件,但它返回一个 FILE 对象,其中包含 NULL _ptr .它是这样发生的:

  var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("test\\test.ext");
var nativeWorker = new NativeWorker(file.Path);
<...>
auto err = _wfopen_s(&this->_myFile, fileName->Data(), L"rb");

返回的err为0,但调试器显示msvcr110d.dll某处发生错误,this->_myFile的所有字段均为NULL,除了_flag 等于 1,_file 等于 3。

为了查明文件本身是否有问题,我写了一个类似于此处显示的片段:How to prevent lost save data when upgrade app on WP8 using cpp .它看起来像这样:

  FILE *tmp;
auto tmpPath = Windows::Storage::ApplicationData::Current->LocalFolder->Path + "\\tmp.txt";
auto tmpErr = _wfopen_s(&tmp, tmpPath->Data(), L"w");

结果几乎相同,只是 tmp_flag 属性现在等于 2。

我正在创建一个标准的 XAML 应用程序,这是在 Windows Phone 运行时组件中完成的。但我很确定情况并非如此,因为我已经创建了一个 3D native 应用程序,并且那里也发生了同样的情况。它甚至发生在从单元测试项目引用的 Windows 应用商店运行时组件中。

我不能拒绝使用 FILE 结构,因为它是我使用的第 3 方 DLL 请求的。也许我错过了一个权限,或者也许有一种方法可以将 WinRT 的 IRandomAccessStream 转换为 FILE,这样我就可以只使用 StorageFile 的 API?最后一个会让我的生活变得更轻松 :)

最佳答案

这是 fopen 函数族的预期行为。返回的FILE* 非空;指向的 FILE_ptr 成员可能为空。

_ptr 成员指向流缓冲区中将发生下一次读取或写入的位置。缓冲区是延迟初始化的,因此由于您尚未执行任何 I/O,因此还没有为流创建缓冲区。因此,_ptr 为空(_base 为空且 _cnt 为零)。

您对 _wfopen_s 的调用成功。如果失败,FILE* 本身将为 null,并且返回的状态代码将为非零。

Is there a method to convert WinRT's IRandomAccessStream to FILE?

没有。

关于c++ - _wfopen_s 在 Windows Phone 应用程序中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20024474/

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