如何创建超过 MAX_PATH 的目录
Posted
技术标签:
【中文标题】如何创建超过 MAX_PATH 的目录【英文标题】:How to create directory exceeding MAX_PATH 【发布时间】:2013-07-18 19:53:18 【问题描述】:出于测试目的,我想在磁盘上创建一个超过 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();
【问题讨论】:
在 C# 中试试这个库:zetalongpaths.codeplex.com/....or 如果它在 WIN32 中,那么你需要使用特殊前缀来允许更长的文件名。见:msdn.microsoft.com/en-us/library/aa365247.aspx 在一些 API 方法中有一条注释,您可以使用带有 Unicode 调用的“\\?\”作为长路径的前缀,但我不知道这是否会转化为命令-线工具 【参考方案1】:在 WIN32 中,您需要使用特殊的“\\?\”前缀来允许更长的文件名。
见:http://msdn.microsoft.com/en-us/library/aa365247.aspx
对于文件 I/O,路径字符串的“\\?\”前缀告诉 Windows 用于禁用所有字符串解析并发送后面的字符串的 API 它直接到文件系统。例如,如果文件系统 支持大路径和文件名,可以超过 MAX_PATH Windows API 强制执行的限制。更多 有关正常最大路径限制的信息,请参阅前面的 部分最大路径长度限制。
当您使用 C# 时,请尝试使用此库,这将使您不必对 WIN32 文件 API 执行所有 PInvokes 并将前缀添加到路径。
http://zetalongpaths.codeplex.com/【讨论】:
【参考方案2】:最简单的解决方法是创建一个目录c:\A\averylongnamethatgoesonandonandon...
,
然后将C:\A
重命名为更长的名称。 Windows 不会检查 A 的每个子项以查看该子项的名称是否会超过 MAX_PATH
。
【讨论】:
您不会将现有目录重命名为短名称,然后创建一个长子目录,然后将其重命名。不,不是一个好的解决方案。此外,如果A
的文件正在使用中,则不能这样做。【参考方案3】:
这样的事情怎么样:
var path = "C:\\";
while (path.Length <= 260)
path = Path.Combine(path, "Another Sub Directory");
【讨论】:
该死,你打败了我+1 我以为他的意思是“在磁盘上创建”? 只需从我的评论中添加创建目录就可以了 @Rup:是的。我编辑了问题@Sayse:你得到了 PathTooLongException @sthiers - 但我很确定您会在此之前创建目录以上是关于如何创建超过 MAX_PATH 的目录的主要内容,如果未能解决你的问题,请参考以下文章
Boost.Filesystem 中的 MAX_PATH 限制