为什么System.IO.Path.GetFullPath()会抛出精确的260个字符的异常?

时间:2012-03-02 13:52:33

标签: .net .net-4.0

在项目中,我们通过使用一些路径traveral(\..)来创建文件的路径,以找到文件的正确位置。此文件的具体完整路径始终低于260个字符标记。现在,如果遍历路径正好是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);

3 个答案:

答案 0 :(得分:1)

您已超出Windows中的最大路径长度。

  

在Windows API中(以下段落中讨论了一些例外),路径的最大长度为MAX_PATH,   定义为260个字符。

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

答案 1 :(得分:1)

Microsoft已确认该错误,并已在.Net 4.5中关闭。

有关详细信息,请查看Microsoft Connect

答案 2 :(得分:0)

我认为它是PathTooLongException?从Path.GetFullPath method文档中,当...时抛出PathTooLongException

  

“指定的路径,文件名或两者都超过了系统定义的最大长度。例如,在基于Windows的平台上,路径必须少于248个字符,文件名必须少于260个字符。”< / p>