个性化阅读
专注于IT技术分析

使用Electron Framework监视文件和目录

本文概述

File and Folder Watcher持续监视一个或多个文件夹中的新文件。当新文件到达时, 文件和文件夹监视程序将触发自定义操作。

chokidar库

为了处理此任务, 我们将使用node.js chokidar库, 该库比node.js的fs.watchFile函数要好得多, 但是为什么呢?

Node.js fs.watch:

  • 不报告OS X上的文件名。
  • 在OS X上使用Sublime之类的编辑器时, 根本不报告事件。
  • 经常两次报告事件。
  • 发出大多数更改作为重命名。
  • 还有很多其他问题。
  • 没有提供一种简便的方法来递归监视文件树。

Node.js fs.watchFile:

  • 事件处理几乎一样糟糕。
  • 也不提供任何递归监视。
  • 导致高CPU使用率。

Chokidar解决了这些问题, 因此我们将在项目中使用它来监视文件夹和文件等。要将其包含在项目中, 请在命令行中执行以下命令:

npm install chokidar --save

然后, 我们将能够在Electron项目中使用javascript使用javascript:

var fileWatcher = require("chokidar");

监控文件夹和文件

要创建监视程序, 请使用chokidar.watch方法并添加适当的侦听器, 以了解有关侦听器和所有方法的更多信息, 请阅读此处的库文档。

以下函数将为给定的文件夹路径创建一个事件监视程序:

function StartWatcher(path){
      var chokidar = require("chokidar");

      var watcher = chokidar.watch(path, {
          ignored: /[\/\\]\./, persistent: true
      });

      function onWatcherReady(){
          console.info('From here can you check for real changes, the initial scan has been completed.');
      }
            
      // Declare the listeners of the watcher
      watcher
      .on('add', function(path) {
            console.log('File', path, 'has been added');
      })
      .on('addDir', function(path) {
            console.log('Directory', path, 'has been added');
      })
      .on('change', function(path) {
           console.log('File', path, 'has been changed');
      })
      .on('unlink', function(path) {
           console.log('File', path, 'has been removed');
      })
      .on('unlinkDir', function(path) {
           console.log('Directory', path, 'has been removed');
      })
      .on('error', function(error) {
           console.log('Error happened', error);
      })
      .on('ready', onWatcherReady)
      .on('raw', function(event, path, details) {
           // This event should be triggered everytime something happens.
           console.log('Raw event info:', event, path, details);
      });
}

现在, 我们需要观察的路径。创建一个简单的按钮, 该按钮将启动系统的文件夹浏览器以选择路径, 并使用以下代码启动监视程序:

var dialog = require('electron').remote;
dialog.showOpenDialog({
    properties: ['openDirectory']
}, function(path){
    if(path){
        // Start to watch the selected path
        StartWatcher(path[0]);
    }else {
        console.log("No path selected");
    }
});

系统文件夹浏览器应该出现, 并且如果选择了文件夹, 观察者将开始扫描给定路径内的文件夹和文件。然后它将开始监视所有给定的事件。

基本功能应显示在控制台中:

Electron文件观察器

要查看previos项目, 请随时在github上的代码世界的官方Electron示例中对其进行探索。玩得开心

赞(1)
未经允许不得转载:srcmini » 使用Electron Framework监视文件和目录

评论 抢沙发

评论前必须登录!