2016-04-17 28 views
1

この問題は解決できません。ノードfsの使用createWriteStreamを使ってファイルを作成し、データを書き込み、削除しようとしますが、ノードが開いている間は削除できません。Node.js - createWriteStreamで作成したファイルを削除できません。

次は私がこのプロセスのために使用していますコードです:

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

ファイルは、成功して作成され、空のデータの1メガバイトは正しくに書き込まれます。問題は、fs.unlinkファイルを手動で削除しようとすると(Windows - ファイルを削除)、フォルダから消えてしまいますが、フォルダを更新するとファイルはまだそこに残っています。私はそれがノードによって使用されなくなったら、それは削除マークされていると思う。

file.close(),file.end()file.emit("close")file.emit("end")などのいくつかの理由でファイルを閉じようとしましたが、ファイルを削除できませんでした。

ファイルを「完了」して、必要なときにファイルを削除するにはどうすればよいですか?私はそれが書かれた後にそれ自身を閉じたと思った。

答えて

0

ああ)要求を取得します。

ファイルをクローズする正しい方法は、以下の

​​

fdであるファイル記述子であるとそれが位置していたかを理解するために私にしばらく時間がかかりました。私は私のコード例からfileを使用してみましたが、それは結局、私はそれだけの数で、ファイルのファイルディスクリプタにつまずい

fd must be a file descriptor

エラーを返しました。あなたが持っているファイル参照で見つけることができます。私の場合、私がしなければならなかったのは、

fs.close(file.fd); 

です。これでファイルを削除できるようになりました。

コールバックは、誰もが望んでいる場合は、2番目の引数に使用することができます:https://nodejs.org/api/fs.html#fs_fs_close_fd_callback

1

基礎ファイル記述子がいつ閉じられたかを知るには、.end()が呼び出された後にcloseイベントをリッスンする必要があります。たとえば、次のように私はそれがHTTP(Sからファイルにあなたのパイプストリームデータがそうであるように、それ自体によって閉じされていない場合、正しくファイルを閉じるための方法を見つけるために管理異なるコードの組み合わせを試した後

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

はすでにそれが機能しなかった、ということを試みました。幸いにも、私は自分の問題の解決策を見つけ出し、答えをすでに投稿しました。それにもかかわらず、助けてくれてありがとう。 – Shadow

関連する問題