2012-03-02 73 views
1

在一個項目中,我們通過使用某些路徑traveral(\..)來找到文件的正確位置來創建文件的路徑。該文件的具體完整路徑始終低於260個字符的標記。現在我們有一個例外,如果遍歷路徑正好是260個字符,但不是如果它更長。爲什麼System.IO.Path.GetFullPath()會拋出具有260個字符的異常?

爲了向您展示問題,我做了一個小測試,拋出一個我無法解釋的異常,有什麼想法?

string root = "c:\\fold"; 
string subfolder = "\\aFolder"; 
string traversal = "\\.."; 

// creates the string ""c:\\fold\\aFolder\\..\\aFolder\\.." ... with length 249 
var pathShorterThen260 = root + Enumerable.Repeat(subfolder + traversal, 22).Aggregate((first, second) => first + second); 

// Works without any problem and returns "c:\fold" 
var exactPath1 = Path.GetFullPath(pathShorterThen260); 

// creates the string ""c:\\fold\\aFolder\\..\\aFolder\\.." ... with length 271 
var pathGreaterThen260 = root + Enumerable.Repeat(subfolder + traversal, 24).Aggregate((first, second) => first + second); 

// Works without any problem and returns "c:\fold" 
var exactPath2 = Path.GetFullPath(pathGreaterThen260); 

// creates the string ""c:\\fold\\aFolder\\..\\aFolder\\.." ... with length 260 
var pathEqualTo260 = root + Enumerable.Repeat(subfolder + traversal, 23).Aggregate((first, second) => first + second); 

// Throws PathTooLongException, why? 
var exactPath3 = Path.GetFullPath(pathEqualTo260); 
+0

經過256你超過MAXPATH的窗戶,我認爲。只是一個想法,但奇怪的大約260,只有260. http://support.microsoft.com/kb/177665 – kenny 2012-03-02 13:56:25

+1

這是.NET 4的特定行爲,它在早期版本中的長字符串炸彈。 Path.NormalizePath()方法被重寫,該算法很難反向工程。將此發佈到connect.microsoft.com以獲取編寫代碼的人的意見。 – 2012-03-02 14:31:54

回答

1

您已經超過了windows中的最大路徑長度。

在Windows API(以下段落中討論了一些例外)中,路徑的最大長度爲MAX_PATH, 定義爲260個字符。

http://msdn.microsoft.com/en-us/library/aa365247.aspx

+0

但是它爲什麼然後炸開正好260和工作沒有任何麻煩更多然後260個字符? – Oliver 2012-03-05 09:39:36

+0

@Oliver您可以針對另一條評論中提到的具有Passant的'Path.NormalizePath()'運行反射器。通過快速搜索可以看出4個可能引發'PathToLongException'的地方。 – asawyer 2012-03-05 13:14:46

0

我以爲這是一個PathTooLongException?從Path.GetFullPath method文檔中,PathTooLongException時拋出......

「指定的路徑,文件名或者兩者都超出了系統定義的最大長度。例如,在基於Windows的平臺上,路徑必須小於超過248個字符,並且文件名稱必須少於260個字符。「

+0

但是,如果有超過260個字符並且只有260個字符,那麼爲什麼不會拋出異常呢? – Oliver 2012-03-05 09:40:28

相關問題