Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js-无法删除使用createWriteStream创建并写入的文件_Javascript_Node.js_Filesystems - Fatal编程技术网

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

Javascript Node.js-无法删除使用createWriteStream创建并写入的文件,javascript,node.js,filesystems,Javascript,Node.js,Filesystems,我找不到解决这个问题的办法。使用节点fs,我使用createWriteStream创建一个文件,将数据写入其中,然后尝试删除它,但在节点打开时无法删除它 以下是我在此过程中使用的代码: var file = fs.createWriteStream("test.txt", {flags: "a"); file.write(new Buffer(1048576)); 文件创建成功,1MB的空数据正确写入。问题是,当我尝试fs.取消链接文件或手动删除它(Windows-delete file)时,

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

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

var file = fs.createWriteStream("test.txt", {flags: "a");
file.write(new Buffer(1048576));
文件创建成功,1MB的空数据正确写入。问题是,当我尝试
fs.取消链接
文件或手动删除它(Windows-delete file)时,它会从文件夹中消失,但当我刷新文件夹时,文件仍然存在,直到节点关闭为止。我认为一旦节点不再使用它,它就会被标记为删除

我已尝试在进程结束后使用
file.close()
file.end()
file.emit(“close”)
file.emit(“end”)
和其他一些工具关闭该文件,但仍然无法删除该文件


如何“完成”文件,以便在需要时将其删除?我认为它在写入后会自动关闭。

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

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

唉,在试验了不同的代码组合之后,我设法找到了一种方法,如果文件没有像从HTTP(s)get请求将流数据导入文件时那样自行关闭,则可以正确地关闭该文件

关闭文件的正确方法如下

fs.close(fd);
fd
是文件描述符,我花了一段时间才理解它的位置。我尝试使用代码示例中的
文件
,但它返回了错误

fd必须是文件描述符

最后我无意中发现了文件的文件描述符,它只是一个数字。您可以在您拥有的文件引用中找到它。就我而言,我所要做的就是

fs.close(file.fd);
完成后,现在可以删除该文件


如果有人愿意,可以对第二个参数使用回调:

已经尝试过了,但没有效果。幸运的是,我找到了问题的解决方案,并且已经发布了答案。谢谢你的帮助。