【发布时间】:2016-08-15 12:48:22
【问题描述】:
我正在尝试用 C# 构建 UWP 应用程序。我的应用程序有一个用 C++ 编写的本机库。每当应用尝试读取 ApplicationData.LocalFolder 中的文件时,CreateFile2 api 都会返回 ERROR_NOT_SUPPORTED_IN_APPCONTAINER。该文件存在于为此 api 指定的路径中。
这是我的应用中的操作顺序。
- 启动应用程序。应用创建文件并写入一些数据
- 稍后基于用户输入的应用程序会尝试读取此文件中的数据
第 1 步工作正常。应用程序能够创建文件并在其中写入数据。只有当应用程序稍后尝试访问它时,它才会收到此错误。
我使用
Windows.Storage.ApplicationData.Current.LocalFolder.Path
这是我在应用中看到的实际路径:
C:\Users\xxxxx\AppData\Local\Packages\ac7a11e4-c1d6-4d37-b9eb-a4b0dc8f67b8_yyjvd81p022em\LocalState\temp.txt
我的代码如下:
CREATEFILE2_EXTENDED_PARAMETERS ms_param = {0};
ms_param.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
ms_param.dwFileAttributes = FILE_ATTRIBUTE_READONLY;
ms_param.dwFileFlags = FILE_FLAG_NO_BUFFERING;
ms_param.dwSecurityQosFlags = SECURITY_DELEGATION;
ms_param.lpSecurityAttributes = NULL;
ms_param.hTemplateFile = NULL;
g_hfile = CreateFile2(filename, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, OPEN_EXISTING, &ms_param);
if (g_hfile == INVALID_HANDLE_VALUE)
{
return GetLastError();
}
我尝试使用 OPEN_EXISTING 和 OPEN_ALWAYS 选项为 dwCreationDisposition 参数的 CreateFile2,但我看到了在任何一种情况下都会出现相同的错误。
我之前遇到过与 CreateFile2 类似的问题。但这是我的应用程序的一个问题,我已经解决了这个问题。这次虽然文件在 LocalFolder 中可用,但我仍然收到错误消息。
【问题讨论】:
标签: visual-c++ file-io uwp windows-10-universal c++-cx