如何避免EMFILE,打开错误?

我得到的错误:

EMFILE, open <filename> 

我不认为这是打开文件太多的情况。

当我运行ulimit ,输出是: unlimited ,所以我不认为这是问题。 我创build了许多子目录,当创build子目录时,我调用fs.exists在做fs.writeFile之前检查目录是否真实存在

问题是什么 ?

编辑:ulimit -n输出1024

你不应该使用writeFile甚至appendFile,他们都打开文件到每个追加。

使用stream更好。 您可以pipe理自己的文件句柄,并在需要时closures它,或不

 var stream = fs.createWriteStream("append.txt", {flags:'a'}); stream.write("data"); stream.end; 

你应该尝试优雅的FS: https : //github.com/isaacs/node-graceful-fs

正如描述所述,它将open和readdir调用排队,并且如果有太多文件描述符出现EMFILE错误,则会在closures时重试它们。

这是一个很好的解释: http : //blog.izs.me/post/56827866110/wtf-is-emfile-and-why-does-it-happen-to-me