1

Path.GetFullPath(path);工作正常。但Directory.CreateDirectory(path);抛出path too long异常。这两种方法对反斜杠的计数是否不同?

4

3 回答 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 回答