[英]Strange error while deleting a file using the module fs in node js
我正在嘗試使用模塊fs刪除文件夾中的某些文件。 僅當文件的舊時間(修改時間)超過1分鍾時,才需要刪除該文件。 但是我收到一個奇怪的錯誤。
var fs = require("fs");
var files = fs.readdirSync("./folder");
for (var i in files) {
fs.stat("./folder/" + files[i], function (err, stats) {
var currentTimestamp = Math.round(new Date().getTime() / 1000);
var fileTimestamp = Math.round((new Date(stats.mtime).getTime() / 1000));
if ((currentTimestamp - fileTimestamp) > 60 * 1) {
//Elimino il file di cache
fs.unlinkSync("./folder/" + files[i], function (err) {
if (err) {
console.log(err);
} else {
console.log("File deleted");
}
});
}
});
}
不幸的是我得到這個錯誤
fs.js:765
return binding.unlink(pathModule._makeLong(path));
^
Error: ENOENT, no such file or directory
為什么會這樣? 我該如何解決? 謝謝
編輯
我在fs.unlinkSync("./folder/" + files[i], function (err)
之前創建了一個日志,發現該fs.unlinkSync("./folder/" + files[i], function (err)
被同一文件調用了兩次,但是文件夾中只有一個文件....那個名字
問題如下:-
您正在fs.stat
中for loop
的異步調用 。 而for
是一個sync
塊。 有可能在for
循環結束后會調用它。 最后,它將調用最后一個值為i
所有回調。
由於i
值相同,因此它將多次搜索同一文件,最終將引發錯誤。
您的問題有兩種解決方案。
1)使用fs.statSync
和fs.unlinkSync
以便進行同步調用。 在整個循環執行之前, i
的值不會增加,但這不是執行此操作的好方法。
2)使用Array.forEach
因為它是一個async
進程,因此它將在每個文件上調用該函數。 我更喜歡這種方法。
我已經修改了您的問題,並使其與Array.forEach
一起使用。
var fs = require("fs");
var files = fs.readdirSync("./Folder");
var deleteFile = function (fileName) {
fs.stat("./Folder/" + fileName, function (err, stats) {
var currentTimestamp = Math.round(new Date().getTime() / 1000);
var fileTimestamp = Math.round((new Date(stats.mtime).getTime() / 1000));
if ((currentTimestamp - fileTimestamp) > 60 * 1) {
//Elimino il file di cache
console.log('deleting ',fileName)
fs.unlink("./Folder/" + fileName, function (err) {
if (err) {
console.log(err);
} else {
console.log("File deleted");
}
});
}
});
}
files.forEach(deleteFile);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.