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

时间:2009-01-16 06:14:54

标签: vb.net excel

如何使用vb.net

创建长度超过260个字符的文件副本,包括文件名

当我们尝试使用File.Copy方法创建副本时,它会抛出异常,如下所示:

“指定的路径,文件名或两者都太长。完全限定的文件名必须少于260个字符,目录名称必须少于248个字符。”

有可能,请帮助......

7 个答案:

答案 0 :(得分:9)

您正在遇到MAX_PATH限制。作为解决方法,您应该能够直接P / Invoke到kernel32.dll的CopyFile函数,并使用目标路径前面的“\\?\”前缀来防止遇到MAX_PATH问题。

请注意,虽然您能够以大多数应用程序无法打开文件的方式复制文件,因为它们也受到MAX_PATH的限制。

可以在此处找到问题的详细概述:http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

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

schnaader linked看起来它的库将为你节省P / Invoking到kernel32.dll的问题,不确定你是否想要依赖外部dll。

答案 1 :(得分:2)

有缩短名称的提示...请参阅http://support.microsoft.com/?kbid=320081#

上标题为“原因4:文件存在于比MAX_PATH字符更深的路径”的部分

答案 2 :(得分:2)

你会在这里找到支持长文件名的complete library

答案 3 :(得分:1)

我找到了解决这个问题的方法。

在R& D上我发现我们可以重命名指定的路径目录,即使总长度超过260个字符,然后我们可以将文件从指定位置复制到新(临时)位置以进行扫描。最后,我们可以再次使用原始路径重命名文件路径名称。

答案 4 :(得分:0)

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

1)计算文件名length

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

答案 5 :(得分:0)

答案 6 :(得分:0)

jdelimon已经指出了Delimon.Win32.IO图书馆,但他们最后一次更新时间是2012年(.Net 2.0)。这是另一个图书馆:AlphaFS

他们升级到.Net 4.5.2(2017年6月29日)。我使用了一个非常短的#C程序,用作Excel的COM加载项。请参阅this link in how to create a programthis link for the copy-program。您只需将程序分配给.NET 4.5,添加对AlphaFS.dll for 4.5的引用,并将var gulp = require('gulp'), concat = require('gulp-concat'), minify = require('gulp-minify-css'); gulp.task('css', function() { var styles = [ 'node_modules/sweetalert/dist/sweetalert.css' ]; return gulp.src(styles) .pipe(minify()) .pipe(concat('libs.min.css')) .pipe(gulp.dest('public/assets/css')); }); 替换为root@bite-srv:/var/www/test# gulp css [12:51:27] Using gulpfile /var/www/test/gulpfile.js [12:51:27] Starting 'css'...` [12:51:27] Finished 'css' after 582ms