Node.js 向NodeJs Archiver添加N个文件时如何处理丢失的文件
我正在使用Archiver向zip添加一系列文件,但是如果文件丢失,比如说被删除或移动,显然会导致问题。但我无法回避这个问题 我现在的代码是这样的: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
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世界的艺术有时就像再次学习走路。谢谢你的帮助。