0

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

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

问题是,除了图像文件之外,我看不到任何加载任何内容的方法。例如,XmlReader 不支持这些 URI 方案,并且所有 Windows.Storage.PathIO 静态读取方法都会抛出

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

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

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

卢克

4

2 回答 2

0

您可以将ms-appx方案与所有接受 URI 的 WinRT API 一起使用。你可以像这样重写你的代码(它也直接读取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");
于 2013-05-09T04:50:31.133 回答
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();

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

我为不接受包 URI 的 XmlReader.Create 方法提交了一个连接错误 - 它不应该这么难,如果没有使用它,包 URI 的意义何在。

于 2013-05-08T16:25:47.747 回答