如何创建超过MAX_PATH的目录

时间:2013-07-19 13:41:28

标签: c# windows max-path

出于测试目的,我想在磁盘上创建一个超出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();
    }

3 个答案:

答案 0 :(得分:12)

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

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

  

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

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

答案 1 :(得分:1)

这样的事情怎么样:

var path = "C:\\";
while (path.Length <= 260)
{
    path = Path.Combine(path, "Another Sub Directory");
}

答案 2 :(得分:1)

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