首页 > 解决方案 > nodejs - 检测文件结尾(EOF)

问题描述

我需要将文件读入nodejs中的缓冲区并为此使用“旧” read() 函数,因为我需要具有严格大小的缓冲区。

我有一个循环来逐块读取文件。但是如何检测是否到达文件结尾(EOF)?
我的代码是:

do
  fs.read(fd, buf1, 0, CHUNKSIZE, null, (err, bytesRead, buffer) => {
    console.log("Bytes read: " + bytesRead);
    console.log("Buffer: " + buffer);   
  });
while (!EOF)

但是我怎样才能确定EOF?

标签: node.jsfs

解决方案


流的结尾是 when chunkSize > bytesRead,请务必使用将缓冲区转换为字符串,bytesRead否则您可能会以垃圾字符结尾。

function readAll(fd, chunkSize, callback) {
    fs.read(fd, new Buffer(chunkSize), 0, chunkSize, null, (err, bytesRead, buffer) => {
        if (err) {
            return callback(err);
        }

        console.log(buffer.toString('utf8', 0, bytesRead));
        if (chunkSize > bytesRead) {
            callback();
        } else {
            readAll(fd, chunkSize, callback);
        }
    });
}

推荐阅读