Mój problem polega na tym, że nie mogę być pewien, kiedy plik został pomyślnie zapisany, a plik został zamknięty. Rozważmy następujący przypadek:Jak poprawnie opróżnić plik 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.
});
});
Jak wymusić lub w inny sposób upewnić się, że plik został poprawnie przepłukany przed uzyskaniem do niego dostępu? Muszę mieć pewność, że plik jest tam i kompletny, ponieważ mój kod musi odrodzić zewnętrzny proces, aby odczytać i przetworzyć plik.
Dzięki, słuchanie wydawania "zamkniętego" wydarzenia wydaje się załatwiać. Nie wiedziałem, że destroySoon jest zbędny dla plików. –
Świetnie. Cieszę się, że mogłem pomóc. –
to w rzeczywistości nie działa dla nas. Nadal mamy pewne przypadki (na SmartOS/Mac i Windows, gdzie zamknięty jest sygnał ZANIM zawartość pliku została opróżniona) – mgoetzke