У меня есть скрипт узла, который выполняется в течение нескольких дней до его завершения.
Во время работы этот скрипт создает и манипулирует многими файлами, используя следующие функции:
fs.writeFileSync
fs.appendFileSync
Я должен отметить, что файловые операции не являются узким местом в моем сценарии, поэтому использование этих методов "sync" - это осознанный выбор.
В какой-то случайный момент во время длительного выполнения этого скрипта он выдает следующее исключение:
Error: (node:13308) UnhandledPromiseRejectionWarning: Error: EBUSY: resource busy or locked, open '...'
at Object.openSync (fs.js:443:3)
at Object.writeFileSync (fs.js:1194:35)
at Object.appendFileSync (fs.js:1240:6)
Я почти уверен, что это ошибка в результате какого-то другого процесса Windows, который "захватывает"держать "этого файла (а не проблему в моем коде, потому что сценарий иногда завершается без сбоев).
Предполагая, что это действительно так, и что другой процесс" отпускает "файлаЧерез некоторое время я решил обойти эту проблему следующим образом:
Сначала я заменил const fs = require("fs");
на const fs = require("./fs");
.
Затем я добавил файл fs.js
:
const fs = require("fs");
for (const funcName of ["writeFileSync", "appendFileSync"]) {
module.exports[funcName] = function(fileName, ...args) {
while (true) {
try {
return fs[funcName](fileName, ...args);
}
catch (error) {
console.log(error.message);
}
}
};
}
IЯ проверил, работает ли этот код.
Однако я очень неохотно использую этот патч, потому что он не кажется правильным.
Возможно, у вас есть какие-либо предложенияо том, как справиться с этим?
Моя ОС - Windows 10.
Большое спасибо!