6

出于测试目的,我想在磁盘上创建一个超过 Windows MAX_PATH 限制的目录。我怎样才能做到这一点?

(我试过 Powershell、cmd、windows explorer => 它被阻止了。)

编辑: 使用 ZetaLongPaths 库中的 ZlpIOHelper 可以做到这一点,而标准 Directory 类会引发可怕的异常:

        static void Main(string[] args)
    {
        var path = @"d:\temp\";
        var dirName = "LooooooooooooooooooooooooooooooooooooooooooooongSubDirectory";
        while (path.Length <= 280)
        {
            path = Path.Combine(path, dirName);
            ZlpIOHelper.CreateDirectory(path); //Directory.CreateDirectory(path);
        }
        Console.WriteLine(path);
        Console.ReadLine();
    }
4

3 回答 3

14

在 WIN32 中,您需要使用特殊的“\\?\”前缀来允许更长的文件名。

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

对于文件 I/O,路径字符串的“\\?\”前缀告诉 Windows API 禁用所有字符串解析并将其后面的字符串直接发送到文件系统。例如,如果文件系统支持大路径和文件名,则您可以超过由 Windows API 强制执行的 MAX_PATH 限制。有关正常最大路径限制的更多信息,请参阅上一节最大路径长度限制。

当您使用 C# 时,请尝试使用此库,这将使您不必对 WIN32 文件 API 执行所有 PInvokes 并将前缀添加到路径中。

于 2013-07-19T13:48:16.263 回答
2

最简单的解决方案是创建一个目录c:\A\averylongnamethatgoesonandonandon...,然后重命名C:\A为更长的名称。Windows 不会检查 A 的每个子项以查看该子项的名称是否会超过MAX_PATH.

于 2013-07-19T15:16:21.860 回答
1

像这样的东西怎么样:

var path = "C:\\";
while (path.Length <= 260)
{
    path = Path.Combine(path, "Another Sub Directory");
}
于 2013-07-19T13:44:14.170 回答