如何使用vb.net
创建长度超过260个字符的文件副本,包括文件名当我们尝试使用File.Copy方法创建副本时,它会抛出异常,如下所示:
“指定的路径,文件名或两者都太长。完全限定的文件名必须少于260个字符,目录名称必须少于248个字符。”
有可能,请帮助......
答案 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 program和this 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
。