Windows store apps 访问Windows应用商店软件包中的内容

Windows store apps 访问Windows应用商店软件包中的内容,windows-store-apps,Windows Store Apps,这篇文章“如何加载MSDN上的文件资源”和其他文章讨论了用于寻址应用程序包中内容的ms appx和ms appdata URI方案 问题是,除了图像文件,我看不到任何加载其他内容的方法。例如,XmlReader不支持这些URI方案和所有Windows.Storage.PathIO静态读取方法 COMException:“调用COM组件时返回错误HRESULT E_FAIL。” 异常可能是由错误的URI/使用错误引起的。我知道Silverlight过去出于各种原因发送此消息 有人能从他们的软件包

这篇文章“如何加载MSDN上的文件资源”和其他文章讨论了用于寻址应用程序包中内容的ms appx和ms appdata URI方案

问题是,除了图像文件,我看不到任何加载其他内容的方法。例如,XmlReader不支持这些URI方案和所有Windows.Storage.PathIO静态读取方法

COMException:“调用COM组件时返回错误HRESULT E_FAIL。”

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

有人能从他们的软件包中读取非图像数据吗


卢克

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

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,那么包URI有什么意义。

您可以使用
ms appx
方案来处理所有接受URI的WinRT API。您可以这样重写代码(它也可以直接从
读取,而不是先将完整的文件内容加载到
字符串
):

PathIO
方法也可以正常工作。我刚试过这个:

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

感谢Damir-使用OpenStreamForReadAsync API是我最初的努力,但我在闲逛时改变了它。很遗憾,XmlReader不只是采用ms appx URI,还可以节省几个小时。
var xml = await PathIO.ReadTextAsync("ms-appx:///Assets/Sample Data.xml");