我找不到任何解决此问题的方法。使用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>
如何“完成”文件以便在需要时将其删除?在写完之后我觉得它自己关闭了。
答案 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