当尝试使用 createReadStream 和 readline 逐行读取文件时,我没有获得所有行。跳过前x行。使用包含10000行的文件进行测试,跳过前4000个。
const remote = window.require('electron').remote;
const fs = remote.require('fs');
const readline = remote.require('readline');
const instream = fs.createReadStream('test.txt');
const rl = readline.createInterface(instream);
let row = 0;
rl.on('line', function (line) {
row++;
console.log(row + ': ' + line);
});
使用fs.readFileSync读取文件会返回所有行。
const data = fs.readFileSync('test.txt');
console.log(data.toString());
答案 0 :(得分:0)
一旦调用createInterface
,它将开始读取文件并发出line
事件,因此必须确保on('line', ...)
之后同步调用createInterface
(即,不之间的任何await
或setTimeout
回调。
在我的情况下,我随机丢失了前几百行文件,因为在await
之间有createInterface
并读取了以下行:
const rl = readline.createInterface(stream);
const connection = await connectToDatabase(); // await causes lines to be lost!
for await (const line of rl) {
...
}