Node.js學習之文件監控

Node允許監視文件或目錄是否發生變化。監視意味着當文件系統裏面的文件被創建、修改、刪除,都會觸發指定的回調函數。

Node提供的File System(文件系統)模塊中提供了兩個關於文件監控的函數:
fs.watchFile() - 實時監控文件變化
fs.watch() - 實時監控文件夾變化

Node API中明確提出:fs.watch() 比 fs.watchFile 和 fs.unwatchFile 更高效。 可能的話,應該使用 fs.watch 而不是 fs.watchFile 和 fs.unwatchFile。

首先以監控特定文件爲例,監視工作目錄下的.CSS文件:
創建watchFile.js文件

// 加載File System(文件系統)模塊
var fs = require('fs');
// 獲取工作目錄下所有文件
var files = fs.readdirSync(process.cwd());
files.forEach(function(file) {
    // 監聽“.css”後綴的文件
    if (/\.css/.test(file)) {
        console.log('正在監控:' + process.cwd() + '/' + file);
        fs.watchFile(process.cwd() + '/' + file, function(curr, prev) {
            console.log('-' + file + ' changed !');
            // 注意是"`"(筆記本鍵盤上數字1前面那個按鈕),不是單引號
            console.log(`the current mtime is: ${curr.mtime}`);
            console.log(`the previous mtime was: ${prev.mtime}`);
            // 監測具體操作
            if(Date.parse(prev.ctime) == Date.parse(curr.mtime)){
               console.log('-' + file + ' 文件被創建');
            }else if(Date.parse(curr.mtime) == 0){
               console.log('-' + file + ' 文件被刪除');   
            }else if(Date.parse(curr.mtime) != Date.parse(prev.mtime)){
               console.log('-' + file + ' 文件被修改'); 
            }
        });
    }
});

監視工作目錄的下所有文件:創建watchFolder.js文件

// 加載File System(文件系統)模塊
var fs = require('fs');

// 獲取工作目錄下所有文件
var files = fs.readdirSync(process.cwd());
var count = 0;
// 列出所有監控的文件
console.log('正在監控:' + process.cwd());
files.forEach(function(file) {
    console.log((++count) + ' ' + file);
});

// 監聽器回調有兩個參數 (eventType, filename)。 eventType 可以是 'rename' 或 'change',filename 是觸發事件的文件的名稱。
// 注意,在大多數平臺,當一個文件出現或消失在一個目錄裏時,'rename' 會被觸發。
fs.watch(process.cwd(), function(eventType, filename) {
    console.log(`事件類型是: ${eventType}`);
    if (eventType == 'change') {
        console.log('文件:' + filename + ' 被修改!');
    } 
    if (eventType == 'rename') {
        console.log('文件:' + filename + ' 被新建/刪除!');
    }

});

參考:
Node API:
http://nodejs.cn/api/fs.html#fs_fs_read_fd_buffer_offset_length_position_callback

Node.js 中File System模塊詳細介紹:
http://www.tuicool.com/articles/equ22ev
http://javascript.ruanyifeng.com/nodejs/fs.html#toc7
http://www.jianshu.com/p/5683c8a93511

Node.js中其他文件監控模塊:
http://www.cnblogs.com/cool-fire/p/6565242.html
http://tech.it168.com/a2015/0228/1707/000001707605.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章