javascript - 为什么 Node mkdirSync() 会抛出异常?

标签 javascript node.js windows

我在 Windows 8 上运行 Node v4.2.0。我发现 fs.mkdirSync() 偶尔会无缘无故地抛出 EPERM。

我设法使用此测试代码重新创建它,并将其保存在文件 bug.js 中。

var fs = require("fs");
var i;
for (i = 0; i < 100000; i += 1) {
    fs.mkdirSync("xx");
    fs.rmdirSync("xx");
}

这是我偶尔得到的跟踪:

C:\WIP>node bug
C:\WIP\bug.js:0

    Error: EPERM: operation not permitted, mkdir 'C:\WIP\xx'
        at Error (native)
        at Object.fs.mkdirSync (fs.js:799:18)
        at Object.<anonymous> (C:\WIP\bug.js:4:8)
        at Module._compile (module.js:435:26)
        at Object.Module._extensions..js (module.js:442:10)
        at Module.load (module.js:356:32)
        at Function.Module._load (module.js:311:12)
        at Function.Module.runMain (module.js:467:10)
        at startup (node.js:134:18)
        at node.js:961:3

这种情况并不总是发生,即使是 100000 次循环也是如此。事实上,它是一个狡猾的野兽 - 如果我运行 bug.js 几次,它似乎会降低遇到异常的可能性。当我 try catch 异常时,我发现它是在循环的数千次成功迭代之后发生的。

为什么会出现异常?有什么办法可以避免异常吗?

最佳答案

我在运行 Node v4.0.0 时遇到了同样的错误,如果我在 Windows 资源管理器中打开该文件夹,这种情况似乎会更频繁地发生。

fs.js:747
  return binding.mkdir(pathModule._makeLong(path),
                 ^
Error: EPERM, operation not permitted 'C:\path\folder'
    at Error (native)
    at Object.fs.mkdirSync (fs.js:747:18)
    at Object.<anonymous> (C:\path\script.js:88:4)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

我降级到 Node v0.12.8 并且相同的过程运行顺利。

关于javascript - 为什么 Node mkdirSync() 会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33244641/

相关文章:

javascript - 访问任意父类(super class)中声明的属性

javascript - 带有 JS/jQuery 滚动的纯 CSS 视差

javascript - Meteor:分享模板

node.js - 如何保持 Node 脚本在我的服务器上运行?

python - Windows 用户如何通过 cygwin 连接云谷歌服务器?

c++ - codecvt_utf8<wchar_t> 被转换为原生 codecvt<wchar_t, char>

c++ - 我是否正确实现了时钟漂移?

javascript - 在 Tampermonkey 中模拟 mousedown、click、mouseup 序列?

javascript - 当属性更改时,AngularJS 绑定(bind)不起作用

node.js - Auth0 - 使用用户信息丰富数据