2013-02-01 17 views
7

मेरी समस्या यह है कि मैं यह सुनिश्चित नहीं कर सकता कि फ़ाइल को सफलतापूर्वक लिखा गया है और फ़ाइल बंद कर दी गई है। निम्नलिखित मामले पर विचार करें:Node.js फ़ाइल को फ़्लश करने के लिए कैसे लिखें ठीक है?

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

इसके अलावा, destroySoonend के बाद की कोई आवश्यकता नहीं है, वे one and the same हैं।

+0

धन्यवाद, आउटस्ट्रीम 'करीबी' घटना सुनना चाल चल रहा है। यह नहीं पता था कि नष्ट करने के लिएूनून फाइलों के लिए अनावश्यक था। –

+0

ग्रेट। मैं खुशी से मदद कर सकता है। –

+5

यह वास्तव में हमारे लिए काम नहीं कर रहा है। हमारे पास अभी भी कुछ मामले हैं (SmartOS/Mac और Windows पर जहां फ़ाइल सामग्री को फ़्लश करने से पहले बंद किया जाता है) – mgoetzke

0

https://github.com/TomFrost/FlushWritable देखें - मुझे नहीं पता कि यह लिखने योग्य कोर में क्यों नहीं लिखा गया है लेकिन यह चाल चलाना चाहिए।

इसके अलावा, गिटहब https://github.com/nodejs/node-v0.x-archive/issues/7348 पर इसे संबोधित करने पर एक चर्चा है।