在一個項目中,我們通過使用某些路徑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);
經過256你超過MAXPATH的窗戶,我認爲。只是一個想法,但奇怪的大約260,只有260. http://support.microsoft.com/kb/177665 – kenny 2012-03-02 13:56:25
這是.NET 4的特定行爲,它在早期版本中的長字符串炸彈。 Path.NormalizePath()方法被重寫,該算法很難反向工程。將此發佈到connect.microsoft.com以獲取編寫代碼的人的意見。 – 2012-03-02 14:31:54