如何创build长度超过260个字符的文件的副本

如何使用vb.net创build长度超过260个字符(包括文件名)的文件的副本

当我们试图使用File.Copy方法创build一个副本时,它会抛出exception,如下所示:

“指定的path,文件名或这两者太长,完全合格的文件名必须less于260个字符,并且目录名称必须less于248个字符。

有没有可能,那么请帮忙…

您正在运行MAX_PATH限制。 作为周围的工作,应该能够直接调用kernel32.dll的CopyFile函数,并在目标path前使用“\\?\”前缀来防止遇到MAX_PATH问题。

请注意,尽pipe您可以通过大多数应用程序无法打开的方式来复制文件,因为它们也受到MAX_PATH的限制。

这个问题可以在这里find: http : //blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton的.aspx

使用C#调用这些方法的P /的一些示例代码可以在第2部分find,在这里: http : //blogs.msdn.com/bclteam/archive/2007/03/26/long-paths-in-net-part -2-的-3-长path的解决方法,KIM-hamilton.aspx

schnaader 链接的库看起来像将它保存到kernel32.dll中的P / Invoking问题,不知道是否要依赖于外部DLL。

有一些缩短名称的提示…请参阅http://support.microsoft.com/?kbid=320081#标题为“ 原因4:文件存在于比MAX_PATH字符更深的path中 ”一节

你会在这里find一个支持长文件名的完整库 。

我得到了关于这个问题的解决scheme。

在研发上我发现我们可以重命名指定的path目录,即使总长度超过260个字符,然后我们可以将文件从指定的位置复制到新的(临时)位置进行扫描。 最后,我们可以重新命名文件path名称与原来的一个。

我通常在这种情况下做的是:

1)计算文件名的length

2)如果FileNameLength > 259然后裁剪足够的文件名来处理新的名称,然后用裁剪的目的地名称复制文件。

看看这个库和这个讨论 。

jdelimon已经指出了Delimon.Win32.IO库,但最后一次更新的是2012(.Net 2.0)。 这里是另一个库: AlphaFS

他们去。净4.5.2(在29/6/2017)。 我使用了一个非常短的#C程序作为Excel的COM加载项。 看到这个链接如何创build一个程序和这个链接的复制程序 。 您只需将程序分配给.NET 4.5,将对AlphaFS.dll的引用添加到4.5,并using Alphaleonis.Win32.Filesystem;replaceusing System.IO using Alphaleonis.Win32.Filesystem;