Node.js – 不能删除用createWriteStream创build并写入的文件

我找不到解决这个问题的办法。 使用Node fs我创build一个文件与createWriteStream,写入数据,然后尝试删除它,但不能删除,而节点打开时。

以下是我用于此过程的代码:

var file = fs.createWriteStream("test.txt", {flags: "a"); file.write(new Buffer(1048576)); 

该文件创build成功,并将1MB的空数据正确写入。 问题是当我尝试fs.unlink文件或手动删除它(Windows – 删除文件),它从文件夹中消失,但一旦我刷新文件夹该文件仍然存在,它总是在那里,直到节点closures。 我认为一旦它不再被Node使用,它就被标记为删除。

我已经试过用file.close()file.end()file.emit("close")file.emit("end")和其他一些程序closures文件,但仍然无法删除文件。

我如何“完成”文件,以便在需要时可以删除它? 我以为写完后就自己关了。

要知道底层文件描述符什么时候closures,需要在调用.end()后监听close事件。 例如:

 var file = fs.createWriteStream("test.txt", {flags: "a"); file.on('close', function() { console.log('fd closed'); }); file.end(new Buffer(1048576)); 

唉实验不同的代码组合后,我设法find一种方法来正确closures文件,如果它没有被自己closures,就像当你从HTTP(s)获取请求pipestream数据到文件时一样。

closures文件的正确方法如下

 fs.close(fd); 

fd是文件描述符,花了我一些时间来了解它的位置。 我尝试使用我的代码示例中的file ,但它返回了错误

fd must be a file descriptor

最后我偶然发现了文件的文件描述符,它只是一个数字。 你可以在你的文件中find它。 就我而言,我只需要做的就是

 fs.close(file.fd); 

完成后,现在可以删除该文件。

如果有人愿意,可以使用callback函数作为第二个参数: https : //nodejs.org/api/fs.html#fs_fs_close_fd_callback