C++/CX - GetFileAsync 抛出断点错误
C++/CX - GetFileAsync throws breakpoint error
我正在尝试从我的资产文件夹中打开一个 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 中遇到了我无法解决的错误,我请求你,社区尝试帮助我。
我对你的代码进行了一次修改:xmlFile
字符串包含一个需要转义的反斜杠:
String^ xmlFile = "Assets\MyXmlFile.xml";
另请注意,如果您只是在项目中右键单击 "Assets" 并选择 "Add new item",则该项目可能最终位于您的根项目文件夹中(默认情况下)。如果您希望将其部署到 Assets 子文件夹,则它需要实际存在于磁盘上的 assets 子目录中,而不仅仅是在 Assets 过滤器中。 (与 C# 不同,C++ 项目 "folders" 实际上是过滤器,不反映物理目录位置。)
我正在尝试从我的资产文件夹中打开一个 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 中遇到了我无法解决的错误,我请求你,社区尝试帮助我。
我对你的代码进行了一次修改:xmlFile
字符串包含一个需要转义的反斜杠:
String^ xmlFile = "Assets\MyXmlFile.xml";
另请注意,如果您只是在项目中右键单击 "Assets" 并选择 "Add new item",则该项目可能最终位于您的根项目文件夹中(默认情况下)。如果您希望将其部署到 Assets 子文件夹,则它需要实际存在于磁盘上的 assets 子目录中,而不仅仅是在 Assets 过滤器中。 (与 C# 不同,C++ 项目 "folders" 实际上是过滤器,不反映物理目录位置。)