error while saving to a file Error: EMFILE: too many open files
error while saving to a file Error: EMFILE: too many open files
我正在编写代码生成例程并写入文件,但它抛出错误
{ [Error: EMFILE: too many open files, open 'C:\file.txt']
errno: -4066,
code: 'EMFILE',
syscall: 'open',
path: 'C:\file.txt' }
for(var i = 0;i<100000;i++) {
var a = randomString.generate({
length: 6,
capitalization: 'uppercase',
charset:'alphanumeric',
readable: true
});
console.log(a)
fs.appendFile('C:/file.txt', a + "\r\n", function (err) {
if (err) return console.log(err);
});
}
如何解决此错误以及将其存储在文件中的有效方法是什么。我用过 graceful-fs,它工作得很好,但需要了解核心 node.js fs 模块。
假设您的目标是将 100K 个随机字符串附加到一个文件,您不应该使用 fs.appendFile()
。相反,使用 writable stream 将随机字符串附加到文件:
var fs = require('fs');
var out = fs.createWriteStream('C:/file.txt', { flags : 'a' });
for (var i = 0; i < 100000; i++) {
var a = randomString.generate({
length: 6,
capitalization: 'uppercase',
charset:'alphanumeric',
readable: true
});
console.log(a)
out.write(a + '\r\n', 'utf-8');
}
out.end();
前面的回答完全没问题。只是分享另一个选择:一次打开文件并多次写入。
var fd = fs.openSync('C:/Work/temp/file.txt', 'w');
for(var i = 0;i<100000;i++) {
var a = randomString.generate({
length: 6,
capitalization: 'uppercase',
charset:'alphanumeric',
readable: true
});
console.log(a)
fs.write(fd, a + "\r\n", i * 8 /* offset */, 8 /* length */, function (err) {
if (err) {
return console.log(err);
}
});
}
我正在编写代码生成例程并写入文件,但它抛出错误
{ [Error: EMFILE: too many open files, open 'C:\file.txt']
errno: -4066,
code: 'EMFILE',
syscall: 'open',
path: 'C:\file.txt' }
for(var i = 0;i<100000;i++) {
var a = randomString.generate({
length: 6,
capitalization: 'uppercase',
charset:'alphanumeric',
readable: true
});
console.log(a)
fs.appendFile('C:/file.txt', a + "\r\n", function (err) {
if (err) return console.log(err);
});
}
如何解决此错误以及将其存储在文件中的有效方法是什么。我用过 graceful-fs,它工作得很好,但需要了解核心 node.js fs 模块。
假设您的目标是将 100K 个随机字符串附加到一个文件,您不应该使用 fs.appendFile()
。相反,使用 writable stream 将随机字符串附加到文件:
var fs = require('fs');
var out = fs.createWriteStream('C:/file.txt', { flags : 'a' });
for (var i = 0; i < 100000; i++) {
var a = randomString.generate({
length: 6,
capitalization: 'uppercase',
charset:'alphanumeric',
readable: true
});
console.log(a)
out.write(a + '\r\n', 'utf-8');
}
out.end();
前面的回答完全没问题。只是分享另一个选择:一次打开文件并多次写入。
var fd = fs.openSync('C:/Work/temp/file.txt', 'w');
for(var i = 0;i<100000;i++) {
var a = randomString.generate({
length: 6,
capitalization: 'uppercase',
charset:'alphanumeric',
readable: true
});
console.log(a)
fs.write(fd, a + "\r\n", i * 8 /* offset */, 8 /* length */, function (err) {
if (err) {
return console.log(err);
}
});
}