gpt4 book ai didi

javascript - fs.copy 因大量图像而失败,但适用于少量图像

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:22 25 4
gpt4 key购买 nike

我有一组文件名,正在尝试将其从一个目录复制到另一个目录。文件名是在异步链中的函数中构造的,然后在最终函数中使用 fs.copy 复制它们。该脚本也在十个不同的目录上运行,所以我的内容如下所示。它被简化了,但功能是相同的。

var dirs = [{
'src': 'dir1',
'dest': 'dest/dir1',
'files': []
}, {
'src': 'dir2',
'dest': 'dest/dir2',
'files': []
}, {
'src': 'dir3',
'dest': 'dest/dir3',
'files': []
}, {
'src': 'dir4',
'dest': 'dest/dir4',
'files': []
}];

async.series([function(callback){
//get files
dirs.forEach(function(currentSrc){
fs.readdirSync(currentSrc);
});
callback();
},
function(callback){
//make dest dirs with dirs.forEach and fs.mkdir
callback();
},
function(callback){
var src
, dest;
dirs.forEach(funtion(dir){
dir.files.forEach(function(file){
src = path.join(dir.src, file);
dest = path.join(dir.dest, file);
fs.copy(src, dest, {replace: false}, function(err) {
if (err){
console.log('error copying file: ', err);
}
});
});
}]);

这对于少量文件来说效果很好,但是当我尝试使用包含大约 400MB 的目录时,它失败了。所有文件似乎都在目标中,但除了名称之外还有数据(这是正确的),但每个文件的文件大小都是 0。为什么这适用于少量文件,但不适用于大文件?

更新。我收到错误

events.js:85 throw er; // Unhandled 'error' event

更新:我现在正在使用 @Jacob 提供的策略,我所拥有的是:

var dirs = [{
'src': 'src/1',
'dest': 'waterfallDest1',
'files': []
}, {
'src': 'src/2',
'dest': 'waterfallDest2',
'files': []
}, {
'src': 'src/3',
'dest': 'waterfallDest3',
'files': []
}, {
'src': 'src/4',
'dest': 'waterfallDest4',
'files': []
}];




async.eachLimit(dirs, 1000, function (dir, cb) {
async.waterfall([
function (cb) {
fs.mkdir(dir.dest, cb);
},
function (cb) {
fs.readdir(dir.src, cb);
},
function (files, cb) {
async.eachLimit(files, 10, function (file, cb) {
var src = path.join(dir.src, file);
var dest = path.join(dir.dest, file);
try { // In case fs.copy is indeed throwing an error
fs.copy(src, dest, {replace: false}, cb);
} catch (err) {
cb('try-catch err ', err);
}
}, cb);
}
], cb);
}, function (err) {
if (err) {
console.log('Some error happened:\n' + err.stack);
}
});

这成功创建了所有目录,并将文件成功传输到第一个目录,但是每个后续目录都充满了 0k 图像。

最佳答案

the documentation “您可以使用 try/catch 来处理异常或允许它们冒泡。”

  try {
fs.copy(src, dest, {replace: false});
} catch(e) {
if ( e.code != 'EEXIST' ) throw e; // I'm guessing here that this
// is your problem.
}

无论如何,底层库 ncp 应该为 fs 中的零星回调负责。 fs issues 如果 ncp 在幕后多次为单个文件调用回调,那么第二次回调将抛出异常...文件已存在。

关于javascript - fs.copy 因大量图像而失败,但适用于少量图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com