Windows runtime C++17返回拒绝访问,无论其能力如何

Windows runtime C++17返回拒绝访问,无论其能力如何,windows-runtime,visual-studio-2019,c++-winrt,Windows Runtime,Visual Studio 2019,C++ Winrt,我不确定这是否是有意的,但在VS2019中创建一个“空白应用程序c++/WinRT”,并尝试下面这样简单的操作将始终拒绝访问。std:是否只支持app dir和local?还是我遗漏了什么 std::filesystem::path file = LR"(C:\Users\name\Pictures\1.png)"; auto t = std::filesystem::is_regular_file(file); 我曾尝试过BroadFileSystemAccess,但运气不佳,而且没

我不确定这是否是有意的,但在VS2019中创建一个“空白应用程序c++/WinRT”,并尝试下面这样简单的操作将始终拒绝访问。std:是否只支持app dir和local?还是我遗漏了什么

std::filesystem::path file = LR"(C:\Users\name\Pictures\1.png)";
    auto t = std::filesystem::is_regular_file(file);

我曾尝试过BroadFileSystemAccess,但运气不佳,而且没有各种功能。我认为最终的答案是,如果没有使用RT文件访问API而不是C++ STD,那么这是无法完成的::

UWP应用程序没有直接访问任何文件系统,除非: 对软件包安装文件夹的只读非独占访问 对漫游或本地应用程序数据文件夹的读/写访问 读取/写入专用临时文件夹。 所有其他访问都通过Windows运行时“代理”进行调解

一种解决方案是使用Windows运行时API将整个文件复制到临时文件夹,然后在临时副本上使用std::filesystem

下面是使用图片文件夹的示例:

#include "winrt/Windows.Storage.h"
#include "winrt/Windows.Storage.Pickers.h"

using namespace winrt::Windows::Storage;
using namespace winrt::Windows::Storage::Pickers;

FileOpenPicker openPicker;
openPicker.ViewMode(PickerViewMode::Thumbnail);
openPicker.SuggestedStartLocation(PickerLocationId::PicturesLibrary);
openPicker.FileTypeFilter().Append(L".jpg");
openPicker.FileTypeFilter().Append(L".png");

auto file = co_await openPicker.PickSingleFileAsync();
if (file)
{
    auto tempFolder = ApplicationData::Current().TemporaryFolder();
    auto tempFile = co_await file.CopyAsync(tempFolder, file.Name(), NameCollisionOption::GenerateUniqueName);
    if (tempFile)
    {
        std::filesystem::path file = LR"(tempFile.Path().c_str())";
...
        DeleteFile(tempFile.Path().c_str());
    }
}

请参见

,但OP正在使用该功能。这不应该授予他们对整个文件系统的完全访问权限,而不授予需要管理权限的文件权限吗?此功能适用于Windows.Storage命名空间中的API。它仍在使用代理。顺便说一句,UWP没有管理员权限。有一些限制性的CAP,比如broadFileSystemAccess,但UWP进程仍在AppContainer上下文中运行。感谢您清除它。如果我想使用C++/WinRT访问文件系统,那么我需要按照您的建议使用代理。我想我的困惑来自这样一个事实:在VS2019中使用各种C++/WinRT项目会产生非常不同的结果:Blank App-Access denied!Windows控制台应用程序C++/WinRT-成功!Windows桌面应用程序C++/WinRT-成功!您创建的空白应用程序是用于UWP的。如上所述,UWP对访问文件有限制。但是控制台应用程序和桌面应用程序都是针对桌面的,桌面应用程序没有这样的限制,所以它会成功。