在项目中,我们通过使用一些路径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);
答案 0 :(得分:1)
您已超出Windows中的最大路径长度。
在Windows API中(以下段落中讨论了一些例外),路径的最大长度为MAX_PATH, 定义为260个字符。
答案 1 :(得分:1)
Microsoft已确认该错误,并已在.Net 4.5中关闭。
有关详细信息,请查看Microsoft Connect。
答案 2 :(得分:0)
我认为它是PathTooLongException
?从Path.GetFullPath
method文档中,当...时抛出PathTooLongException
“指定的路径,文件名或两者都超过了系统定义的最大长度。例如,在基于Windows的平台上,路径必须少于248个字符,文件名必须少于260个字符。”< / p>