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