जब आप किसी लॉग फ़ाइल में लिखना चाहते हैं, अर्थात फ़ाइल के अंत में डेटा जोड़ना, कभी उपयोग न करें appendFile
। appendFile
आपके द्वारा जोड़े गए डेटा के प्रत्येक टुकड़े के लिए एक फ़ाइल हैंडल खोलता है, थोड़ी देर के बाद आपको एक सुंदर EMFILE
त्रुटि मिलती है ।
मैं जोड़ सकता हूं कि appendFile
ए की तुलना में उपयोग करना आसान नहीं है WriteStream
।
उदाहरण के साथ appendFile
:
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
fs.appendFile("append.txt", index+ "\n", function (err) {
if (err) console.log(err);
});
});
console.log(new Date().toISOString());
मेरे कंप्यूटर पर 8000 तक, आप डेटा को फ़ाइल में जोड़ सकते हैं, फिर आप इसे प्राप्त करेंगे:
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
at Error (native)
errno: -4066,
code: 'EMFILE',
syscall: 'open',
path: 'C:\\mypath\\append.txt' }
इसके अलावा, appendFile
यह सक्षम होने पर लिखेंगे, इसलिए आपके लॉग टाइमस्टैम्प द्वारा नहीं लिखे जाएंगे। आप उदाहरण के साथ परीक्षण कर सकते हैं, 100000 के स्थान पर 1000 सेट कर सकते हैं, ऑर्डर यादृच्छिक होगा, फ़ाइल तक पहुंच पर निर्भर करता है।
यदि आप किसी फ़ाइल में संलग्न करना चाहते हैं, तो आपको इस तरह एक लिखने योग्य स्ट्रीम का उपयोग करना होगा :
var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
आप जब चाहें इसे समाप्त कर दें। आपको उपयोग करने की भी आवश्यकता नहीं है stream.end()
, डिफ़ॉल्ट विकल्प है AutoClose:true
, इसलिए जब आपकी प्रक्रिया समाप्त हो जाएगी, तो आपकी फ़ाइल समाप्त हो जाएगी और आप बहुत सारी फाइलें खोलने से बचेंगे।