我想在读取文件时读取文件的字节大小。我有这个
var path = 'training_data/dat1.txt';
var fs = require("fs"); //Load the filesystem module
var stats = fs.statSync(path);
var fileSizeInBytes = stats["size"];
var accSize = 0;
var lineReader = require('readline').createInterface({
input: fs.createReadStream(path)
});
lineReader.on('line', function (line) {
accSize += Buffer.byteLength(line, 'utf8');
console.log(accSize + "/" + fileSizeInBytes);
});
lineReader.on('close', function() {
console.log('completed!');
});
但是它不能打印出正确的文件大小。
7/166
16/166
23/166
32/166
39/166
48/166
55/166
64/166
71/166
80/166
87/166
96/166
103/166
112/166
例如,将其打印出来。
有人知道怎么了吗?
最佳答案
在读取每行时,lineReader
在缓冲区中不包括换行符\n
字符,这是您丢失字节的地方。
尝试这个:
accSize += Buffer.byteLength(line + '\n', 'utf8');
编辑
如果正在读取的文件使用Windows行尾,则您需要添加两个字符,因为这些字符除了换行之外还具有回车符,表示为
'\r\n'
。 (see this for more details)