C ++ / CX - GetFileAsync抛出断点错误

时间:2015-10-14 21:35:31

标签: c++ xml file storage c++-cx

我正在尝试从我的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上遇到了错误,我无法解决这个错误,而且我在问你,社区是否可以帮助我。

1 个答案:

答案 0 :(得分:1)

您的代码通过一次修改为我工作:xmlFile字符串包含需要转义的反斜杠:

String^ xmlFile = "Assets\\MyXmlFile.xml";

另请注意,如果您刚刚在项目中右键单击“资产”并选择“添加新项目”,则该项目可能已在您的根项目文件夹中结束(这是默认设置)。如果您希望将它部署到Assets子文件夹,则需要在assets子目录中的磁盘上实际存在,而不仅仅是在Assets过滤器中。 (与C#不同,C ++项目“文件夹”实际上是过滤器,不反映物理目录位置。)