我需要定期使用大量未格式化的只读文本文件,并检查每个文件中是否存在某些内容/单词。该文件由所有字母数字字符组成。但是,我甚至在读取这些大型静态文件之一的流的end
时遇到了问题。
下面是我尝试在注意到它未到达end
后尝试运行的最简单代码的副本,但这仍然不会触发end
事件。我可以看到许多data
的迭代/块被读取,但永远不会触发文件和end
的所有数据。
function readFile(file) {
const readStream = fs.createReadStream(file, {
fd: null,
flags: 'r',
encoding: 'utf-8',
allowVolatile: true,
highWaterMark: staticHighWaterMark,
});
readStream.on('data', (chunk) => {
console.log('DATA chunk', chunk.length);
});
readStream.on('end', () => {
console.log('END file');
});
}
这很简单,我开始怀疑它是否与我的环境有关,但是如果在上面的简单逻辑中有任何问题被认为是一个问题,请告诉我。
注意:如果我继续增加highWaterMark
选项,则会进一步浏览文件,但仍然无法访问文件的end
。但是,这对于到达或未到达文件的末尾应该没有区别,而是控制每个“块”读取的数据量。
答案 0 :(得分:0)
您可以测试一下,看看是否可以读取整个文件?
function readFileV2(file) {
const readStream = fs.createReadStream(file, {
fd: null,
flags: 'r',
encoding: 'utf-8',
allowVolatile: true,
highWaterMark: staticHighWaterMark,
});
readStream.pipe(process.stdout);
}