none
c++ 读取xml崩溃 RRS feed

  • 问题

  • 照着下载的例子写了一下xml的读写,write是没有问题,就是read的时候就崩溃了,

    First-chance exception at 0x76537945 in NewXMLOp.exe: Microsoft C++ exception: Concurrency::unobserved_task_exception at memory location 0x09F5E7AC.

    代码基本上是和例子一样,例子是正常的,路径也没用错,是不是工程上需要其它的参数设置?谢谢!

    read xml代码:

    void NewXMLOp::MainPage::Button_Click_2(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { StorageFolder^ installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation; task<StorageFile^> getFileTask(installFolder->GetFileAsync(_XML_FILE_)); getFileTask.then([this](StorageFile^ file) { task<IRandomAccessStream^> openTask(file->OpenAsync(FileAccessMode::Read)); openTask.then([this](IRandomAccessStream^ readStream) { HRESULT hr = ReadXML(readStream); if (FAILED(hr)) { throw Exception::CreateException(hr); } }); }); }

    2012年7月12日 3:23

答案

全部回复

  • 为什么不直接用WinRT Class XmlDocument去读取? 他有个方法 LoadFromFileAsync(IStorageFile) 

    还有你的代码 ReadXML函数没有给出实现,所以不是很清楚里面具体的逻辑。

    我建议的代码如下:

    #include <ppltasks.h>
    ...
    using namespace Windows::Storage;
    using namespace Windows::Storage::Streams;
    using namespace Windows::Data::Xml::Dom;
    	StorageFolder^ installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;
    	task<StorageFile^> getFileTask(installFolder->GetFileAsync(L"Test.xml"));
    	getFileTask.then([this](StorageFile^ file)
    	{		
    		task<XmlDocument^> readxml(XmlDocument::LoadFromFileAsync(file));
    		readxml.then([this](XmlDocument^ xmldoc)
    		{
    			String^ xml = xmldoc->GetXml();
    		});
    	});


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月12日 8:57
    版主
  • 同样要崩,我觉得不是方法的问题,应该是哪个地方没有设置,帮忙看看上传的整个工程文件(43k),谢谢!

    2012年7月12日 10:03
  • 我发现你并没有在  Windows::ApplicationModel::Package::Current->InstalledLocation 下包含TestXmlOpt.xml文件。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 pjfitren 2012年7月16日 3:23
    2012年7月13日 4:17
    版主