2011-12-23 94 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

而您的其他問題:
如果窗口中有空格,則「運行」窗口在路徑名稱周圍需要引號。