本文概述
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");
}
});
系统文件夹浏览器应该出现, 并且如果选择了文件夹, 观察者将开始扫描给定路径内的文件夹和文件。然后它将开始监视所有给定的事件。
基本功能应显示在控制台中:
要查看previos项目, 请随时在github上的代码世界的官方Electron示例中对其进行探索。玩得开心
评论前必须登录!
注册