Node.js 向NodeJs Archiver添加N个文件时如何处理丢失的文件

Node.js 向NodeJs Archiver添加N个文件时如何处理丢失的文件,node.js,Node.js,我正在使用Archiver向zip添加一系列文件,但是如果文件丢失,比如说被删除或移动,显然会导致问题。但我无法回避这个问题 我现在的代码是这样的: for (var i=0; i<receivedIds.length; i++) { var filePath = './public/pdf/letter-pdfs/'+receivedIds[i]+'.pdf'; console.log(filePath); try { pdfStream = fs

我正在使用Archiver向zip添加一系列文件,但是如果文件丢失,比如说被删除或移动,显然会导致问题。但我无法回避这个问题

我现在的代码是这样的:

for (var i=0; i<receivedIds.length; i++) {
    var filePath = './public/pdf/letter-pdfs/'+receivedIds[i]+'.pdf';
    console.log(filePath);
    try {
        pdfStream = fs.createReadStream(filePath);
        archive.append(pdfStream, {name: receivedIds[i]+'.pdf'});
    } catch(e) {
        console.error(e);
    }
}

虽然捕获到了错误,但归档程序只输出了一些空文件,即使某些文件确实存在。如何更新此文件以附加确实存在的文件,而忽略不存在的文件?

在将文件读入存档之前,请确保文件存在:

for (var i=0; i<receivedIds.length; i++) {
    var filePath = './public/pdf/letter-pdfs/'+receivedIds[i]+'.pdf';
    console.log(filePath);
    try {

        // will throw if it does not exist
        // alternatively, use fs.statSync or an async version of the two
        fs.accessSync(filePath);

        pdfStream = fs.createReadStream(filePath);
        archive.append(pdfStream, {name: receivedIds[i]+'.pdf'});
    } catch(e) {
        console.error(e);
    }
}

for(var i=0;i只需在将文件读入存档之前确保该文件存在:

for (var i=0; i<receivedIds.length; i++) {
    var filePath = './public/pdf/letter-pdfs/'+receivedIds[i]+'.pdf';
    console.log(filePath);
    try {

        // will throw if it does not exist
        // alternatively, use fs.statSync or an async version of the two
        fs.accessSync(filePath);

        pdfStream = fs.createReadStream(filePath);
        archive.append(pdfStream, {name: receivedIds[i]+'.pdf'});
    } catch(e) {
        console.error(e);
    }
}

for(var i=0;我做到了,谢谢!但是在一次跟进中,我了解到节点人员不赞成fs.exists()方法,因为如果您检查然后加载,总是有失败的机会,这不是有同样的可能性吗?@SWalsh我记住了这一点,并完全避免了
的存在,正如您所看到的。如果您依赖
访问
stat
,那么就没有问题了。此外,如果您确实想要,异步版本也是可用的避免一个阻塞操作。至于在文件系统读取读写之后的机会,这是一个应该尝试控制的东西,因为没有可靠的解决方案。如在使用中,避免在使用时修改或删除这些文件。如果经常发生这种情况,请考虑使用某种文件系统锁。注意,这些东西是这样的DEP。来自我的.NET世界的艺术有时就像再次学习走路一样。谢谢你的帮助。成功了,谢谢!但是,在一次跟进中,我了解到节点人员不赞成fs.exists()方法,因为如果您检查然后加载,总是有失败的机会,这不是有同样的可能性吗?@SWalsh我记住了这一点,并完全避免了
的存在,正如您所看到的。如果您依赖
访问
stat
,那么就没有问题了。此外,如果您确实想要,异步版本也是可用的避免一个阻塞操作。至于在文件系统读取读写之后的机会,这是一个应该尝试控制的东西,因为没有可靠的解决方案。如在使用中,避免在使用时修改或删除这些文件。如果经常发生这种情况,请考虑使用某种文件系统锁。注意,这些东西是这样的DEP。来自我的.NET世界的艺术有时就像再次学习走路。谢谢你的帮助。