2011-12-23 64 views
0

我有以下文件:Windows中的长路径错误?

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 

我可以通过记事本打开的窗口中打开此文件罚款++,或者通过浏览。但是,通过运行窗口打开不起作用。它给出了'无法找到文件'对话框。当我查询文件系统在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); 

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

+1

204个字符远远没有任何限制。再想一想。 – 2011-12-23 10:44:00

+0

使用xmlDoc.Load – 2011-12-23 10:44:05

+0

Windows中的许多API具有260个字符的限制,但是204个字符的数量低于此值,所以这不是问题的原因。 – CodesInChaos 2011-12-23 10:44:14

回答

7

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

参数 XML 类型:System.String包含XML文档加载 字符串。

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

改为使用XmlDocument.Load方法。

参数 名 类型:System 网址为包含XML文档加载文件。该URL可以是本地文件或HTTP URL(Web地址)。

调用XmlDocument.Save时,因为像Load,这是一个参数代表文件路径你不面对的问题。

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

+0

@CodeBlend:该方法已经是我的答案中的同一个MSDN页面的超链接:) – Ani 2011-12-23 10:47:54

+0

我的不好,我需要更仔细一点,其实它的链接两次,所以对我来说双重坏点 – Coops 2011-12-23 10:50:50

+0

哈哈,好吧,真的很愚蠢。 – 2011-12-23 10:56:41

2

而您的其他问题:
如果窗口中有空格,则“运行”窗口在路径名称周围需要引号。