C# 在创建目录时反斜杠算两次,但在获取完整路径时只算一次吗?

C# 在创建目录时反斜杠算两次,但在获取完整路径时只算一次吗?,c#,.net,C#,.net,Path.GetFullPath(路径)工作正常。但是Directory.CreateDirectory(路径)引发路径太长的异常。这两种方法的反斜杠计数是否不同?在编译时“计算”转义字符,因此两种方法都只看到一个字符(反斜杠),而不是两个。转义字符是“不可见的”,一旦应用程序被编译,它们只在源代码中可见;换句话说,“\\”序列在编译时(而不是运行时)解析并转换为单个反斜杠。您必须达到Windows最大路径大小(248个字符),因此 无法创建目录 您能粘贴目录路径吗?在中,似乎使用了私有常量Ma

Path.GetFullPath(路径)工作正常。但是
Directory.CreateDirectory(路径)引发路径太长的
异常。这两种方法的反斜杠计数是否不同?

在编译时“计算”转义字符,因此两种方法都只看到一个字符(反斜杠),而不是两个。转义字符是“不可见的”,一旦应用程序被编译,它们只在源代码中可见;换句话说,“\\”序列在编译时(而不是运行时)解析并转换为单个反斜杠。

您必须达到Windows最大路径大小(248个字符),因此

无法创建目录

您能粘贴目录路径吗?

在中,似乎使用了
私有常量MaxDirectoryLength
(255),而使用了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之前也被调用)


因此,似乎文件夹名称不能超过248个字符,而完整路径(包括每个子文件夹)可以更长。

在ILSpy中,
GetFullPath
使用
MaxDirectoryLength
(255),而
CreateDirectory
使用248个字符。@TimSchmelter您可以将其更改为答案。这似乎是答案。@ispiro:很难理解它的来源,我仍然不确定我是否正确地解释了它。在基于Windows的平台上,路径必须少于248个字符,文件名必须少于260个字符。
// System.IO.Path
private static readonly int MaxDirectoryLength = 255;

// ...
if (num8 - num5 > Path.MaxDirectoryLength)
{
    throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
// ...
// ...
string text2 = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
if (text2.Length >= 248)
{
    throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
// ...