Node.js - 无法删除使用createWriteStream创建并写入

时间:2016-04-17 00:54:34

标签: javascript node.js filesystems

我找不到任何解决此问题的方法。使用Node fs我使用createWriteStream创建一个文件,向其写入数据,然后尝试删除它,但在节点打开时无法删除它。

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

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

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

我尝试使用file.close()file.end()file.emit("close")file.emit("end")以及其他几个但仍然无法删除文件的流程后关闭文件。< / p>

如何“完成”文件以便在需要时将其删除?在写完之后我觉得它自己关闭了。

2 个答案:

答案 0 :(得分:1)

要知道基础文件描述符何时关闭,您需要在调用close后监听.end()事件。例如:

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

答案 1 :(得分:1)

在尝试了不同的代码组合之后,我设法找到了一种正确关闭文件的方法,如果它没有被自己关闭,就像你从HTTP(s)获取请求将数据流传输到文件中那样。

关闭文件的正确方法是使用以下

fs.close(fd);

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

fd must be a file descriptor

最终我偶然发现了文件的文件描述符,它只是一个数字。您可以在文件参考中找到它。就我而言,我所要做的只是

fs.close(file.fd);

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

如果有人想要,可以将回调用于第二个参数:https://nodejs.org/api/fs.html#fs_fs_close_fd_callback