2013-02-01 6 views
7

Mein Problem ist, dass ich nicht sicher sein kann, wenn eine Datei erfolgreich geschrieben wurde und die Datei geschlossen wurde. Betrachten Sie den folgenden Fall:Wie Node.js Datei WriteStream richtig zu löschen?

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. 
    }); 
}); 

Also, wie erzwinge ich oder sonst dafür sorgen, dass die Datei ordnungsgemäß gespült wurde, bevor sie zugreifen? Ich muss sicher sein, dass die Datei da und vollständig ist, da mein Code einen externen Prozess zum Lesen und Verarbeiten der Datei erzeugen muss.

Antwort

7

Ihre Datei Nachverarbeitung in dem writeable stream'sclose Ereignisse Do:

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

Auch keine Notwendigkeit für die destroySoon nach den end, sie sind one and the same.

+0

Danke, hören outstream 'schließen' Ereignis scheint den Trick zu tun. Wusste nicht, dass der destroySoon für Dateien überflüssig war. –

+0

Großartig. Froh, dass ich helfen konnte. –

+5

das funktioniert eigentlich nicht für uns. Wir haben immer noch einige Fälle (auf SmartOS/Mac und Windows, wo die Schließung gesendet wird, bevor der Dateiinhalt gelöscht wurde) – mgoetzke