三、Node.Js 文件或目录监视
1.fs.watchFile(filename, [options], listener);
对文件进行监视,并且在监视到文件被修改时执行处理
/**
* filename, 完整路径及文件名;
* [options], persistent true表示持续监视,不退出程序;interval 单位毫秒,表示每隔多少毫秒监视一次文件
* listener, 文件发生变化时回调,有两个参数:curr为一个fs.Stat对象,被修改后文件,prev,一个fs.Stat对象,表示修改前对象
*/
var fs = require('fs');
var path = require('path');
var file1 = path.resolve('/test1/one.txt');
//监视文件
//1.当第一次创建监视器的时候,如果文件不存在,监视器毁掉函数会触发一次
fs.watchFile(file1, {
interval: 20
}, function(curr, prev) {
if (Date.parse(prev.ctime) == 0) {
console.log('文件被创建');
} else if (Date.parse(curr.ctime) == 0) {
console.log('文件被删除');
} else if (Date.parse(curr.mtime) != Date.parse(prev.mtime)) {
console.log('文件有修改');
}
});
var file2 = path.resolve('/test1/two.txt');
fs.watchFile(file2, function(curr, prev) {
console.log('这是第二个watch,监视文件有修改');
});
2.fs.unwatchFile(filename, [listener]);
取消对文件进行监视
/**
* filename, 完整路径及文件名;
* [listener], 要取消的监听器事件,如果不指定,则取消所有监听处理事件
*/
var fs=require('fs');
var path=require('path');
var file1=path.resolve('/test1/one.txt');
//监视文件
//当前程序没有结束,一直在监视文件
var listener=function(curr,prev){
console.log('监视文件发生修改');
};
fs.watchFile(file1,{interval:100},listener);
//取消监视文件
//当前程序程序结束退出
fs.unwatchFile(file1,listener);
3.fs.watch(filename, [options], [listener]);
监视文件或目录
//对文件或目录进行监视,并且在监视到修改时执行处理;
// fs.watch返回一个fs.FSWatcher对象,拥有一个close方法,用于停止watch操作;
// 当fs.watch有文件变化时,会触发fs.FSWatcher对象的change(err, filename)事件,err错误对象,filename发生变化的文件名
/**
* filename, 完整路径及文件名或目录名;
* [listener(event, filename], 监听器事件,有两个参数:event 为rename表示指定的文件或目录中有重命名、删除或移动操作或change表示有修改,filename表示发生变化的文件路径
*/
var fs=require('fs');
var path=require('path');
var file1=path.resolve('/test1');
//监视文件
var fsWatcher=fs.watch(file1,function(err,filename){
//console.log('创建监视器成功,filename:'+filename);
});
//chang 事件会触发多次
fsWatcher.on('change',function(err,filename){
console.log(filename+'-发生变化');
});
//50秒后 关闭监视
setTimeout(function(){
fsWatcher.close(function(err){
if(err)
console.error(err);
console.log('关闭成功watch');
});
},50000);
更多参考:
http://www.cnblogs.com/gaojun/p/4159488.html