访问Windows应用商店包中的内容

时间:2013-05-08 15:24:44

标签: windows-store-apps

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过去常常出于各种原因抛出此消息。

是否有人能够从其包装中读取非图像数据?

2 个答案:

答案 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");