Bir günlük dosyasına yazmak istediğinizde, örneğin bir dosyanın sonuna veri eklemek istediğinizde, asla kullanmayın appendFile. appendFileDosyanıza eklediğiniz her veri parçası için bir dosya tanıtıcısı açar, bir süre sonra güzel bir EMFILEhata alırsınız .
Bunu appendFilekullanmaktan daha kolay olmadığını ekleyebilirim WriteStream.
İle örnek 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());
Bilgisayarımda 8000'e kadar, dosyaya veri ekleyebilirsiniz, sonra bunu elde edersiniz:
{ 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' }
Dahası, appendFile etkinleştirildiğinde yazılacaktır, böylece günlükleriniz zaman damgası tarafından yazılmaz. Örnekle test edebilirsiniz, 100000 yerine 1000'i ayarlayın, sipariş rastgele olacak, dosyaya erişime bağlı.
Eğer bir dosyaya eklemek istiyorsanız, gereken böyle bir yazılabilir akışı kullanın:
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();
İstediğiniz zaman bitirirsiniz. Kullanmanız bile gerekmez stream.end(), varsayılan seçenek, AutoClose:trueişleminiz sona erdiğinde dosyanız sona erer ve çok fazla dosya açmaktan kaçınırsınız.