MSDN和其他人的文章“如何加载文件资源”,讨论用于解决应用程序包中内容的ms-appx和ms-appdata URI方案。
http://msdn.microsoft.com/en-us/library/windows/apps/hh781229.aspx
问题是,我看不到任何方法来加载图像文件以外的任何东西。例如,XmlReader不支持这些URI方案和所有Windows.Storage.PathIO静态读取方法抛出
COMException:“错误HRESULT E_FAIL已从调用COM组件返回。”
可能异常是由错误的URI /使用错误引起的。我知道Silverlight过去常常出于各种原因抛出此消息。
是否有人能够从其包装中读取非图像数据?
路
答案 0 :(得分: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的重点是什么。
答案 1 :(得分:0)
您可以对所有接受URI的WinRT API使用ms-appx
方案。您可以像这样重写代码(它也可以直接从Stream
读取而不是首先将完整的文件内容加载到string
):
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");