2013-02-01 9 views
7

Vấn đề của tôi là tôi không thể chắc chắn khi tệp được ghi thành công và tệp đã bị đóng. Hãy xem xét trường hợp sau:Làm thế nào để xóa tập tin Node.js writeStream đúng cách?

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

Vì vậy, làm cách nào để buộc hoặc bảo đảm tệp đã được xóa hoàn toàn trước khi truy cập? Tôi cần phải chắc chắn rằng các tập tin có và hoàn thành, như mã của tôi đã để sinh ra một quá trình bên ngoài để đọc và xử lý các tập tin.

Trả lời

7

làm post-processing của tập tin của bạn trong trường hợp writeable stream'sclose:

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

Ngoài ra, không có nhu cầu sử dụng destroySoon sau end, họ one and the same.

+0

Cảm ơn bạn, lắng nghe sự kiện “đóng cửa” bên ngoài dường như thực hiện thủ thuật. Không biết rằng destroySoon là thừa cho các tập tin. –

+0

Tuyệt vời. Mừng vì tôi có thể giúp. –

+5

điều này thực sự không hoạt động đối với chúng tôi. Chúng tôi vẫn có một số trường hợp (trên SmartOS/Mac và Windows, nơi gần được phát ra TRƯỚC KHI nội dung tệp đã được xóa) – mgoetzke