C++ 是否可以使用stdio函数读取Windows应用商店应用程序中的资产?

C++ 是否可以使用stdio函数读取Windows应用商店应用程序中的资产?,c++,windows-8,windows-store-apps,C++,Windows 8,Windows Store Apps,我把一个用C++标准的应用程序移植到Windows 8。我曾尝试使用WRL来读取资产,但它的PITA很大,不适合我使用的多线程模型。C stdio函数似乎在开发机器上也能工作,但在将应用发布到Windows应用商店后,它们还会工作吗 下面的代码获取文件系统上资产的完整路径,并使用该路径打开文件: auto uri = ref new Windows::Foundation::Uri("ms-appx:///Assets/Logo.png"); concurrency::create_task(W

我把一个用C++标准的应用程序移植到Windows 8。我曾尝试使用WRL来读取资产,但它的PITA很大,不适合我使用的多线程模型。C stdio函数似乎在开发机器上也能工作,但在将应用发布到Windows应用商店后,它们还会工作吗

下面的代码获取文件系统上资产的完整路径,并使用该路径打开文件:

auto uri = ref new Windows::Foundation::Uri("ms-appx:///Assets/Logo.png");
concurrency::create_task(Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(uri))
.then([](Windows::Storage::StorageFile^ file)
{
    FILE* f;
    auto path = file->Path->Data();
    auto e = _wfopen_s(&f, path, L"rb");
});

Windows应用商店应用程序将始终具有对其安装目录的读访问权限以及对其本地数据目录的读/写访问权限。即使在将应用程序发布到应用商店之后,也可以使用stdio功能访问这些位置的文件

使用stdio无法访问需要清单文件中的条目才能访问的已知文件夹,例如文档库

应用程序的安装文件夹和本地数据文件夹包括:

Windows::ApplicationModel::Package::Current->InstalledLocation
Windows::Storage::ApplicationData::Current->LocalFolder
获取文件系统路径并在安装位置打开资产文件的示例:

std::wstring wpath = Windows::ApplicationModel::Package::Current->InstalledLocation->Path->Data();
wpath += L"\\Assets\\Logo.png";

FILE* f = nullptr;
errno_t e = _wfopen_s(&f, wpath.c_str(), L"rb");
这些位置也可以通过stdio for Windows Phone应用程序访问。Windows应用商店应用程序还可以使用stdio访问RoamingFolder和TemporaryFolder,这对Windows Phone应用程序不可用。更多信息可在MSDN上找到: