我正在尝试从我的Assets文件夹中打开一个xml文件,但不幸的是我只能通过使用FileOpenPicker来打开我的xml文件,这不是最理想的情况,因为我必须经常获取我的xml文件,而不会打扰当然是用户。
FileOpenPicker^ openPicker = ref new FileOpenPicker();
openPicker->ViewMode = PickerViewMode::List;
openPicker->SuggestedStartLocation = PickerLocationId::Desktop;
openPicker->FileTypeFilter->Append(".xml");
task<StorageFile^>(
openPicker->PickSingleFileAsync()).then([this](StorageFile^ file) {
if (nullptr != file) {
task<Streams::IRandomAccessStream^>(file->OpenAsync(FileAccessMode::Read)).then([this](Streams::IRandomAccessStream^ stream)
{
IInputStream^ deInputStream = stream->GetInputStreamAt(0);
DataReader^ reader = ref new DataReader(deInputStream);
reader->LoadAsync(stream->Size);
String^ strXml = reader->ReadString(stream->Size);
});
}
});
我现在正在尝试将此代码重新构建为一个代码,该代码可以在不让用户选择的情况下加载我的xml文件。我尝试了以下方法:
String^ xmlFile = "Assets\MyXmlFile.xml";
StorageFolder^ InstallationFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;
task<StorageFile^>(
InstallationFolder->GetFileAsync(xmlFile)).then([this](StorageFile^ file) {
if (nullptr != file) {
task<Streams::IRandomAccessStream^>(file->OpenAsync(FileAccessMode::Read)).then([this](Streams::IRandomAccessStream^ stream)
{
IInputStream^ deInputStream = stream->GetInputStreamAt(0);
DataReader^ reader = ref new DataReader(deInputStream);
reader->LoadAsync(stream->Size);
String^ strXml = reader->ReadString(stream->Size);
stream->FlushAsync();
});
}
});
我认为我在GetFileAsync上遇到了错误,我无法解决这个错误,而且我在问你,社区是否可以帮助我。
答案 0 :(得分:1)
您的代码通过一次修改为我工作:xmlFile
字符串包含需要转义的反斜杠:
String^ xmlFile = "Assets\\MyXmlFile.xml";
另请注意,如果您刚刚在项目中右键单击“资产”并选择“添加新项目”,则该项目可能已在您的根项目文件夹中结束(这是默认设置)。如果您希望将它部署到Assets子文件夹,则需要在assets子目录中的磁盘上实际存在,而不仅仅是在Assets过滤器中。 (与C#不同,C ++项目“文件夹”实际上是过滤器,不反映物理目录位置。)