解决NodeJS文件操作中的“ EBUSY”错误

时间:2019-10-27 09:40:40

标签: node.js windows file-io

我有一个运行了几天的节点脚本,直到完成为止。

在运行过程中,该脚本使用以下功能创建和处理许多文件:

  • 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);
            }
        }
    };
}

我已验证此代码有效。

但是,我真的不愿意使用此修补程序,因为它不适合您做。

您会不会对如何解决这个问题有任何建议?

我的操作系统是Windows 10。

非常感谢您!

0 个答案:

没有答案