【发布时间】:2019-07-04 13:16:51
【问题描述】:
我无法使用 c++/winrt、uwp 和 std::ofstream 创建文件。调用 GetLastError() 时收到 0x0000005(拒绝访问)。我可以使用同一文件夹中的 std::ifstream 成功读取文件。 我正在运行 windows10 ver1903 x64,vs2017 ver15.9.13
我已将 broadFileSystemAccess 添加到包清单中,并为整个系统和应用程序本身启用文件系统访问。我确实收到了关于清单中使用 rescap:Capability 的警告,但应用程序可以编译并且没有限制其他人(根据我的阅读)成功访问文件系统。
来自包清单:
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp iot rescap" >
这是功能部分:
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="broadFileSystemAccess" />
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>
这是我对 ofstream 的调用,其中 strOutputFileName 包含我要在 (UWPAA) 应用程序的 Debug\UWPAA\AppX 目录中创建的文件的文件名(我也尝试过其他目录):
std::ofstream ofBinary;
ofBinary.open(strOutputFileName, ios::out);
我本来希望应用程序能够创建文件,尤其是因为我能够使用 std::ifstream 在文件系统中打开文件,但我却得到“拒绝访问”。
有什么想法吗?这让我发疯了......
【问题讨论】:
-
如果您将它们对准应用程序具有写入权限的位置(即 ApplicationData 文件夹中的位置),它们应该可以正常工作。因此您可以尝试使用 localFolder 目录.
-
谢谢飞王。确实,在 localFolder 中我可以读写。在 AppX 目录中,我只能读取(所以我猜它是只读的),但我无权访问文件系统,这应该由 broadFileSystemAccess 定义。我尝试在文件系统中的目录中读取和写入并收到“拒绝访问”。所以我想我的问题实际上在于broadFileSystemAccess 不起作用......正如我上面提到的,应用程序已列出,并且应用程序的文件系统访问设置通常已打开。有什么想法我可能做错了吗?
-
从下面的评论中,你似乎找到了答案。这对遇到相同问题的其他社区会有帮助。所以如果你解决了你的问题,你可以直接发布答案。
标签: uwp windows-10-universal c++-winrt