Windows中的长路径错误?

时间:2011-12-23 10:38:17

标签: c# windows xmldocument

我有以下文件:

C:\Users\Jan\Documents\Visual Studio 2010\Projects\AzureTests\Build\82df3c44-0482-47a7-a5d8-9b39a79cf359.cskpg\WebRole1_778722b2-eb95-476d-af6a-917f269a0814.cssx\39e5cb39-cd18-4e1a-9c25-72bd1ad41b49.csman

我可以通过notepad ++中的打开窗口或通过资源管理器打开此文件。但是,通过“运行”窗口打开不起作用。它给出了“找不到文件”对话框。当我用C#查询文件系统时:

var dir = new DirectoryInfo(@"C:\Users\Jan\...")
var fil = dir.GetFiles("*.csman")[0];

该文件也在返回文件列表中,但我无法执行:

var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(fil.FullName);

因为这会导致'(1,1)'错误的数据不正确。因为XmlDocument认为文件为空。但是,此文件上的File.ReadAllBytes成功。这有效:

var buf = File.ReadAllBytes(fil.FullName);
using (var ms = new MemoryStream())
{
    ms.Write(buf, 0, (int) buf.Length);
    ms.Seek(0, SeekOrigin.Begin);
    xmlDoc.Load(ms);
}

调用时不会出现问题...

xmlDoc.Save(fil.FullName);

有人能解释一下这里发生了什么吗?

2 个答案:

答案 0 :(得分:7)

XmlDocument.LoadXml需要一个直接包含XML数据的字符串。

  

参数   XML       键入:System.String       包含要加载的XML文档的字符串。

因此,它将路径字符串解释为XML(显然是无效的,这就是抛出异常的原因)。

请改用XmlDocument.Load方法。

  

参数   文件名       键入:System.String       包含要加载的XML文档的文件的URL。 URL可以是本地文件,也可以是HTTP URL(Web地址)。

调用XmlDocument.Save时没有遇到问题,因为,与Load一样,它的单个参数代表文件的路径。

基本上,你在那里有点长的文件路径是一个红鲱鱼而不是你所面临问题的根本原因。

答案 1 :(得分:2)

你的另一个问题:
如果路径名中有空格,Windows“运行”需要引号。