আপনি যখন কোনও লগ ফাইলে লিখতে চান, অর্থাত্ কোনও ফাইলের শেষে ডেটা যুক্ত করা হয় না , কখনই ব্যবহার করবেন না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, সুতরাং আপনার প্রক্রিয়াটি শেষ হয়ে গেলে আপনার ফাইলটি শেষ হয়ে যাবে এবং আপনি খুব বেশি ফাইল খুলতে এড়াবেন।