Node.js:写入后关闭文件

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

我目前正在使用writer = fs.createWriteStream(url)获取可写流到文件,并使用writer.write()进行多次写操作,最后我执行writer.end()。我注意到,当我执行writer.end()时,文件大小仍然为零,并保持为零,直到程序终止,此时程序达到其正确大小,并且内容可见且正确。

因此writer.end()似乎没有关闭文件。

规范说“如果在'error'或'finish'时将autoClose设置为true(默认行为),则文件描述符将自动关闭。”

我不确定这里指的是什么“错误”或“完成”。事件大概是:但是它们与我在writer.end()上的通话有何关系?我需要做些什么来导致这些事件吗?

我将尝试直接获取文件描述符,并在写入后显式调用fd.close()将其关闭,但在给定文件描述符的情况下,我看不到获得可写流的方法。

有任何建议吗?

node.js fs
1个回答
0
投票

当您调用.write时,节点不会立即写入文件,但会缓冲所有块,直到达到highWaterMark字节为止。届时它将尝试将内容刷新到磁盘。

为什么检查.write返回值很重要,如果返回false,则意味着您需要等待drain事件发出,如果不这样做,则可以用尽内存的应用程序,请参阅:why does attempting to write a large file cause js heap to run out of memory

.end同样。它不会立即关闭文件,首先将刷新缓冲区,然后将所有内容写入文件,然后将关闭fd

因此,一旦您呼叫.end,就必须等到finish事件发出。

在stream.end()方法被使用后,将发出'finish'事件。调用,并且所有数据都已刷新到基础系统。

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