【问题标题】:Reading only modified data只读取修改过的数据
【发布时间】:2013-06-19 07:51:00
【问题描述】:

在我的项目中,我使用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);
  });
});

【问题讨论】:

    标签: node.js file file-io filestream


    【解决方案1】:

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

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

    prev.size 和 curr.size 的区别告诉你添加了多少字节。通过给 readFile-Function 一个带有 start 和 end 属性的选项对象。

    例如:你总是加到最后,那么你可以这样调用:

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

    如果你在开头添加:

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

    希望有帮助!

    【讨论】:

    • 仅供参考,我将数据附加到文件末尾。但它不起作用 fs.readFile(config.filePath, {start: prev.size}, function ...);它读取整个文件。
    • 谢谢你的回答给了我一个想法+1。
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多