在Windows 7中打开太多文件(EMFILE错误)

Rah*_*man 8 windows windows-7 node.js gulp

我使用Node.js(0.10.31)和Gulp(3.8.8)来自动执行Windows 7中的某些任务,但我遇到了以下错误:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: EMFILE, open 'c:\myproject\package.json'
Run Code Online (Sandbox Code Playgroud)

我已经将项目移动到Ubuntu并使用ulimit -n命令修复它,但仍然很好奇如何在Windows中解决它.

现在,首先我想知道是否有任何限制阻止在Windows 7中打开更多文件/套接字导致EMFILE error与否?

其次,如果是,我该如何改变这种限制?

Che*_*yDT 3

VSC++ 运行时内部存在限制。应用程序只能通过运行时打开 512 个文件描述符,尽管如果应用程序调用该值可以增加到 2048 _setmaxstdio(我认为节点不会)。(这是一个稍微简化的解释,更多详细信息请参见此处。)您无法直接更改此限制(如果您想让节点以某种方式为您调用此函数,则只能将 512 提高到 2048)。

然而,您写道您正在使用节点 v0.10.31,它已经很旧了。据我所知(尽管我对此不是 100% 确定),节点同时从使用 VSC++ 运行时进行文件 I/O 切换到没有此限制的本机 WinAPI 调用,因此您可以尝试最新的节点版本(如果您可以选择)。

  • 既然它被接受了,我认为它解决了问题。我对此进行了研究,但没有找到他们更改时的确切版本,只有*他们这样做了。问题是有没有限制,能不能改变,我回答得比较详细。 (2认同)