2013-02-01 10 views
7

私の問題は、ファイルが正常に書き込まれ、ファイルが閉じられたことを確認できないということです。以下のケースを考えてみましょう:Node.jsファイルのwriteStreamを正しくフラッシュする方法は?

var fs = require('fs'); 
var outs = fs.createWriteStream('/tmp/file.txt'); 
var ins = <some input stream> 

... 
ins.on('data', function(chunk) { out.write(chunk); }); 
... 
ins.on('end', function() { 
    outs.end(); 
    outs.destroySoon(); 
    fs.stat('/tmp/file.txt', function(err, info) { 

     // PROBLEM: Here info.size will not match the actual number of bytes. 
     // However if I wait for a few seconds and then call fs.stat the file has been flushed. 
    }); 
}); 

だから、どのように私は強制か、またはそれ以外のファイルは、それを適切にアクセスする前にフラッシュされていることを確認してください?私のコードはファイルを読み込んで処理する外部プロセスを生成しなければならないので、ファイルがそこにあることを確認する必要があります。

答えて

7

writeable stream'scloseイベントであなたのファイルの後処理を行いません。また、

outs.on('close', function() { 
    <<spawn your process>> 
}); 

enddestroySoonの必要なしに、彼らはone and the sameです。

+0

おかげで、アウトストリーム 'クローズ'イベントを聴くことはそのトリックを行うようです。 destroySoonはファイルに重複していたことを知らなかった。 –

+0

お役に立てて嬉しいです。 –

+5

これは実際に私たちのために働いていません。私たちはまだいくつかのケースを持っています(SmartOS/MacとWindowsでは、ファイルの内容がフラッシュされる前にクローズされます) – mgoetzke