node.js - 只读取修改后的数据

标签 node.js file file-io filestream

在我的项目中,我使用fs.watchFile来监听文本文件的修改。

要求 只读取最近更新的数据

注意在文本文件中,数据总是添加,不会删除。

示例代码

fs.watchFile(config.filePath, function (curr, prev) {
        fs.readFile(config.filePath, function (err, data) {
              if (err) throw err;
            console.log(data);
        });
 });

上面的代码在文件修改时读取整个文本文件。

任何建议都会非常感激。

工作代码

fs.watchFile(config.filePath, function (curr, prev) {
var filestream = fs.createReadStream(config.filePath,{start:prev.size,end:curr.size,encoding:"utf-8");
    filestream.on('data', function (data) {
         console.log(data);
  });
});

最佳答案

您可以使用文件的 stat 对象。 curr 和 prev 对象都是 Stat s 对象并有一个名为“size”的属性。

我假设您总是将数据添加到文件的开头或结尾,否则无法知道数据添加到的位置。

prev.size 和 curr.size 之间的差异告诉您添加了多少字节。通过给出 readFile-Function具有开始和结束属性的选项对象。

比如:你总是添加到最后,那么你可以进行这样的调用:

fs.readFile(config.filePath, {start: prev.size}, function ...);

如果在开头添加:

fs.readFile(config.filePath, {start: 0, end: (curr.size-prev.size)}, function ...);

希望有帮助!

关于node.js - 只读取修改后的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17185733/

相关文章:

java - 使用 JFileChooser 保存字符串

linux - npm 安装显示无法调用未定义的方法 'localeCompare'

node.js - Nodejs 保存到 mongoDB

javascript - Gulp-仅重命名文件而不是目录

java - 从 res 文件夹中读取 csv 文件

c - 在函数中打开二进制文件?请参阅代码 :

javascript - 客户端如何从mongodb获取数据?

php - 每 30 秒运行一次 SQL 查询(计数),然后将输出保存到某个文件

Spring Batch - 验证输入 csv 文件中的标题行,如果文件无效则跳过该文件

c++ - 如何通过跳过=从txt文件中读取整数?