文件"/>
Node.js:写入后关闭文件
我目前正在使用writer = fs.createWriteStream(url)
获取可写流到文件,并使用writer.write()
进行多次写操作,最后我执行writer.end()
。我注意到,当我执行writer.end()
时,文件大小仍然为零,并保持为零,直到程序终止,此时程序达到其正确大小,并且内容可见且正确。
因此writer.end()
似乎没有关闭文件。
规范说“如果在'error'或'finish'时将autoClose设置为true(默认行为),则文件描述符将自动关闭。”
我不确定这里指的是什么“错误”或“完成”。事件大概是:但是它们与我在writer.end()
上的通话有何关系?我需要做些什么来导致这些事件吗?
我将尝试直接获取文件描述符,并在写入后显式调用fd.close()将其关闭,但在给定文件描述符的情况下,我看不到获得可写流的方法。
有任何建议吗?
回答如下:当您调用.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
更多推荐
Node.js:写入后关闭文件
发布评论