Path.GetFullPath(path);
工作正常。但Directory.CreateDirectory(path);
抛出path too long
异常。这两种方法对反斜杠的计数是否不同?
问问题
1184 次
3 回答
3
在ILSpy中,似乎GetFullPath
使用private const MaxDirectoryLength
(255) 而CreateDirectory
使用 248。
Path.GetFullPath -> GetFullPathInternal -> NormalizePath
// System.IO.Path
private static readonly int MaxDirectoryLength = 255;
// ...
if (num8 - num5 > Path.MaxDirectoryLength)
{
throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
// ...
Directory.CreateDirectory -> InternalCreateDirectory(顺便说一句,NormalizePath 在 InternalCreateDirectory 之前也被调用)
// ...
string text2 = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
if (text2.Length >= 248)
{
throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
// ...
因此,文件夹名称似乎不能超过 248 个字符,而完整路径(包括每个子文件夹)可以更长。
于 2012-11-21T12:33:10.587 回答
0
转义字符在编译时“被计算在内” ,因此两种方法都看到一个字符(反斜杠)而不是两个。转义字符在应用程序编译后是“不可见的”,它们只在源代码中可见;换句话说,“\\”序列在编译时(而不是运行时)解析并转换为单个反斜杠。
于 2012-11-20T22:39:57.450 回答
0
您必须达到 Windows Max Path size (248 chars) ,所以
Directory.CreateDirectory(path);
无法创建目录。
您可以粘贴目录路径吗?
于 2012-11-20T22:42:39.483 回答