fs.Dir 最终是否在超出范围时被释放

问题描述 投票:0回答:1

我从另一个问题了解到,

fs.FileHandle
的操作系统文件句柄永远不会自动释放,即使是垃圾收集器也是如此;代码如下:

const file = await fs.open(path);
// do something with file
await file.close();
如果在对文件执行某些操作而不关闭文件时重复发生错误,

将会最终使应用程序崩溃,并显示

EMFILE: too many open files

注:答案是2016年的。7年后还适用吗?

我的问题是,同样的情况也适用于

fs.Dir
吗?

const dir = await fs.opendir(path);

for await (let entry of dir) {
    // do something with entry
}

这里,

dir
应该在异步迭代器到达末尾时自动关闭(如这个问题NodeJS fs源代码)所示)。

如果

// do something with entry
期间发生错误,是不是也永远不会关闭?

node.js filehandle
1个回答
0
投票

fs.Dir
将在
for/of
迭代结束时“自我”关闭(例如,当迭代器完成时)。

但是,如果不让迭代器走到末尾,则必须在

.close()
对象上调用
fs.Dir
。有关该内容的文档位于这里

当垃圾收集时,Nodejs 不会关闭系统资源。他们可能正在努力在未来能够做到这一点,但这不是现在发生的事情。您必须使用一些更高级别的函数来自动关闭系统资源(例如流可能会处理文件句柄),或者必须手动确保为该资源调用适当的方法来释放它,例如

.close()

© www.soinside.com 2019 - 2024. All rights reserved.