在 XmlReader .NET 4.0 中加载失败目录文件

Posted

技术标签:

【中文标题】在 XmlReader .NET 4.0 中加载失败目录文件【英文标题】:Load fail directory file in XmlReader .NET 4.0 【发布时间】:2020-04-09 17:34:27 【问题描述】:

此文件名的字符为  (0xE700)。

当我在 XmlReader 中读取时,我无法读取它,因为文件名加载更改字符是 %EE%9C%80

XmlReader reader = XmlReader.Create(fileName, settings);

为什么  (0xE700) => %EE%9C%80!

【问题讨论】:

你确定是文件名而不是文件内容吗? 是的!这是文件名 【参考方案1】:

这是因为XmlReader.Create 将第一个参数视为 Uri。这并不明显,但您可以从方法签名中获取它

XmlReader Create(string inputUri, XmlReaderSettings settings, XmlParserContext inputContext);

0xE700 是一个特殊字符,不能在 Uri 中使用,转义为%EE%9C%80!

但是您可以更改代码并使用 FileStream 读取文件内容,例如

var fileName = string.Format("0test.xml", char.ConvertFromUtf32(0xE700));
File.WriteAllText(fileName, "<root><node /></root>");
using (var fileStream = new FileStream(fileName, FileMode.Open))

    using (var reader = XmlReader.Create(fileStream))
        reader.ReadStartElement();


new FileStream(fileName, FileMode.Open) 将按名称读取文件,并且不会对文件名进行编码(如 XmlReader.Create 所做的那样)。

【讨论】:

谢谢!我发现了和你建议的一样的处理问题

以上是关于在 XmlReader .NET 4.0 中加载失败目录文件的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 中使用 XmlReader 取消转义 XML 实体?

如何在 .Net 2.0/C# 中将 StreamReader 转换为 XMLReader 对象

从 XmlDocument 到 XmlReader .Net

深入认识XmlReader

XmlReader - 自关闭元素不会触发 EndElement 事件?

错误 CS0012 类型“XmlReader”在未引用的程序集中定义