gpt4 book ai didi

c# - 如何用WinRT打开打包后的文件

转载 作者:可可西里 更新时间:2023-11-01 08:41:34 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何将一些解析 xml 文件的 .Net 代码移植到 WinRT。到目前为止,在The given System.Uri cannot be converted into a Windows.Foundation.Uri的帮助下,我有以下代码。不过,我在创建 Uri 后立即卡住了:

    static readonly Uri ResourcesBase = new Uri(@"ms-resource://MyAssembly/"); 
public override async void Load()
{
Uri uri = new Uri(ResourcesBase, filePath); // filePath = "Data//world.xml";
XmlLoadSettings settings = new XmlLoadSettings() { ValidateOnParse = false };

XmlDocument xmlDoc = await XmlDocument.LoadFromUriAsync(uri, settings);

foreach (IXmlNode xmlNode in xmlDoc.ChildNodes)
{
ProcessNode(xmlNode);
}
}

当我尝试调用 XmlDocument.LoadFromUriAsyn(uri) 时出现未处理的异常:

用户代码未处理 ArgumentException - 值不在预期范围内。

还有其他人觉得使用 WinRT 做任何事情都会困难 10 倍吗?

编辑:

我已经尝试了以下所有字符串,并得到了完全相同的错误:

  Uri uri = new Uri("ms-resource://MyAssembly//" + filePath);
Uri uri = new Uri("ms-resource://MyAssembly/" + filePath);
Uri uri = new Uri("d:\\projects\\crystal\\" + filePath); // A valid absolute path

项目设置:

项目

  • 属性
  • 引用资料
  • Assets
  • 数据
    • 世界.xml
  • 源代码...

在代码中:

  filePath = "Data\\world.xml";

我也试过将 xml 文件放在 assset\data 下,并且只是 Assets 。似乎没有什么不同。

另一件事,我将 xml 的构建操作设置为“内容”。那是对的吗?我唯一能想到的是“嵌入式资源”,但我对此表示怀疑。

完整的异常详细信息:

System.ArgumentException 未被用户代码处理

HResult=-2147024809

Message=Value 不在预期范围内。

Source=Windows.Data.Xml.Dom

堆栈跟踪:

在 Windows.Data.Xml.Dom.XmlDocument.LoadFromUriAsync(Uri uri,XmlLoadSettings loadSettings)

在 d:\Projects\Crystal\library\IO\File\XmlFileSerializer.cs:line 32 中的 Crystal.IO.File.XmlFileSerializer.d__1.MoveNext()

内部异常:

下载可能重现问题的最小示例:test_xml.zip

最佳答案

看了Windows Runtime Xml data API sample终于明白了.

    public override async Load()
{
var file = await GetPackagedFile("assets", "world.xml");
LoadXml(file);
}

private async void LoadXml(StorageFile file)
{
XmlLoadSettings settings = new XmlLoadSettings() { ValidateOnParse = false };
XmlDocument xmlDoc = await XmlDocument.LoadFromFileAsync(file, settings);

foreach (IXmlNode xmlNode in xmlDoc.ChildNodes)
{
//ProcessNode(xmlNode);
}
}

private async Task<StorageFile> GetPackagedFile(string folderName, string fileName)
{
StorageFolder installFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;

if (folderName != null)
{
StorageFolder subFolder = await installFolder.GetFolderAsync(folderName);
return await subFolder.GetFileAsync(fileName);
}
else
{
return await installFolder.GetFileAsync(fileName);
}
}
}

关于c# - 如何用WinRT打开打包后的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com