2013-05-08 289 views
0

文章“如何加载文件资源”在MSDN和其他人,讨论MS-APPX和MS-应用程序数据URI方案在应用程序包的寻址内容。访问内容

http://msdn.microsoft.com/en-us/library/windows/apps/hh781229.aspx

的问题是,我看不到任何方式来加载除图像文件以外的任何东西。 XMLReader可以,例如,不支持这些URI方案和所有Windows.Storage.PathIO静态读方法都抛出

收到COMException:“错误HRESULT E_FAIL已经从COM组件的调用返回。”

可能是异常是由错误的URI /使用错误引起的。我知道Silverlight用于出于各种原因抛出此消息。

有没有人能够从他们的包中读取非图像数据?

Luke

回答

0

我现在可以回答我自己的问题。

var f = Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Data").AsTask().Result; 
var i = f.GetFileAsync("Sample Data.xml").AsTask().Result; 
var s = Windows.Storage.FileIO.ReadTextAsync(i).AsTask().Result; 

var r = System.Xml.XmlReader.Create(new StringReader(s)); 
r.MoveToContent(); 

var x = r.ReadInnerXml(); 

请原谅缺乏等待,它只是实验性的代码。

我提起连接错误的XmlReader.Create方法不接受一个包URI - 它不应该这么难,什么是一个包URI如果没有使用它的点。

0

您可以使用ms-appx方案与所有的WinRT API的接受的URI。你可以重写你的代码是这样的(这也直接而不是加载完整的文件内容Streamstring首先读取):

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Data/Sample Data.xml")); 
var stream = await file.OpenStreamForReadAsync(); 
var reader = XmlReader.Create(stream); 
reader.MoveToContent(); 
var result = reader.ReadInnerXml(); 

PathIO方法也应该可以正常工作。我只是试过这个:

var xml = await PathIO.ReadTextAsync("ms-appx:///Assets/Sample Data.xml"); 
+0

谢谢达米尔 - 使用OpenStreamForReadAsync API是我原来的努力,但我在摆弄时改变了它。 XmlReader不仅仅采用ms-appx URI,这会让人感到遗憾,会节省几个小时。 – 2013-05-09 09:59:54