我想在读取文件时读取文件的字节大小。我有这个

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

09-18 11:22