情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

ファイルやフォルダの変更を監視する

ファイルやフォルダの変更を監視するにはfs.watch関数を使用します。

var fs = require('fs');

var fsw = fs.watch('xxx', {
    persistent: true, 
    recursive: false
}, function (type, filename) {
});

第1引数にファイルやフォルダのパスを指定します。

第2引数にオプションをオブジェクトとして指定します。この引数は指定しなくても構いません。

主なオプションには下のようなものがあります。

  • persistent・・・監視を続けている間プロセスを終了しないかを真偽値として指定します。デフォルトはtrueです。
  • recursive・・・フォルダの配下のフォルダも監視するかを真偽値として指定します。デフォルトはfalseです。

第3引数にファイルやフォルダが変更された場合に呼び出される関数を指定します。この引数は指定しなくても構いません。この関数の第1引数は変更の種類であり、第2引数は変更されたファイルの名称です。

変更の種類には下のようなものがあります。

  • rename・・・ファイルやフォルダの名称が変更されたことを示します。
  • change・・・ファイルの内容が変更されたことを示します。

返り値としてファイルやフォルダの監視状態を表すfs.FSWatcherクラスのインスタンスが得られます。

ファイルやフォルダの変更の監視を終了するにはこのインスタンスのclose関数を使用します。

fsw.close();

なお、このインスタンスでエラーが発生した場合にはerrorイベントが発生します。

サンプルコード1

現在のフォルダの変更を監視します。

fs-watch.js

var fs = require('fs');

var fsw = fs.watch('.', {
    recursive: true
}, function (type, filename) {
    console.log(type + ' ' + filename);
});
fsw.on('error', function (err) {
    console.error(err);
    process.exit(1);
});

実行結果

コードを実行すると現在のフォルダの変更の監視が開始します。

C:\work\node>node fs-watch.js

textfile.txtというファイルを新規作成すると変更が検出されます。

C:\work\node>echo this is text file. > textfile.txt
C:\work\node>node fs-watch.js
rename textfile.txt
change textfile.txt

textfile.txtの内容を変更すると変更が検出されます。

C:\work\node>echo this is text file modified. > textfile.txt
C:\work\node>node fs-watch.js
rename textfile.txt
change textfile.txt
change textfile.txt
change textfile.txt
change textfile.txt

textfile.txtを削除すると変更が検出されます。

C:\work\node>del textfile.txt
C:\work\node>node fs-watch.js
rename textfile.txt
change textfile.txt
change textfile.txt
change textfile.txt
change textfile.txt
rename textfile.txt

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js