Recent changes

2013-04-14 2013-04-02 2013-02-17 2013-01-29 2013-01-20 2013-01-18 2012-12-08 2012-11-06 2012-09-04 2012-08-02

FindFirstChangeNotification



Platform SDKのお話し。

MSDNを引用。

Abstruct

変更通知ハンドルを作成し、変更通知の初期フィルタ条件を設定します。指定されたディレクトリやサブツリーで変更内容がフィルタ条件と一致すると、変更通知ハンドルの待機状態が完了します。 <code> HANDLE FindFirstChangeNotification(

 LPCTSTR lpPathName,    // 監視するディレクトリの名前へのポインタ
 BOOL bWatchSubtree,    // ディレクトリやディレクトリツリーの監視用の
                        // フラグ
 DWORD dwNotifyFilter   // 監視のためのフィルタ条件

</code>

Parameter

lpPathName

監視するディレクトリへのパスを表す、NULL で終わる文字列へのポインタを指定します。

bWatchSubtree

この関数でディレクトリやディレクトリツリーを監視するかどうかを指定します。TRUE を指定すると、指定したディレクトリの下にあるディレクトリツリーを監視します。FALSE を指定すると、指定したディレクトリだけを監視します。

dwNotifyFilter

変更通知の待機操作を満たすフィルタ条件として、次のうち 1 つ以上の値を指定します。

FILE_NOTIFY_CHANGE_FILE_NAME: 監視中のディレクトリ、またはサブツリーでファイル名が変更されると、変更通知の待機操作から制御が戻ります。ファイル名の変更とは、ファイル名の再作成( 変更)、作成、削除を指します。 FILE_NOTIFY_CHANGE_DIR_NAME:監視中のディレクトリ、またはサブツリーでディレクトリ名が変更されると、変更通知の待機操作から制御が戻ります。ディレクトリ名の変更とは、ディレクトリの作成と削除を指します。 FILE_NOTIFY_CHANGE_ATTRIBUTES:監視中のディレクトリ、またはサブツリーで属性が変更されると、変更通知の待機操作から制御が戻ります。 FILE_NOTIFY_CHANGE_SIZE:監視中のディレクトリまたはサブツリーでファイルサイズが変更されると、変更通知の待機操作から制御が戻ります。オペレーティングシステムがファイルサイズの変更を検出できるのは、ファイルがディスクに書き込まれたときだけです。拡張キャッシュを使うオペレーティングシステムでファイルサイズの変更が検出されるのは、キャッシュが十分にフラッシュされたときだけです。 FILE_NOTIFY_CHANGE_LAST_WRITE:監視中のディレクトリまたはサブツリーでファイルに対する前回の書き込み日時が変更されると、変更通知の待機操作から制御が戻ります。オペレーティングシステムでファイルに対する前回の書き込み日時の変更が検出されるのは、ファイルがディスクに書き込まれたときだけです。拡張キャッシュを使うオペレーティングシステムでファイルに対する前回の書き込み日時の変更が検出されるのは、キャッシュが十分にフラッシュされたときだけです。 FILE_NOTIFY_CHANGE_SECURITY:監視中のディレクトリまたはサブツリーでセキュリティ記述子が変更されると、変更通知の待機操作から制御が戻ります。

return

関数が成功すると、変更通知検索オブジェクトのハンドルが返ります。 関数が失敗すると、INVALID_HANDLE_VALUE が返ります。拡張エラー情報を取得するには、GetLastError 関数を使います。

Description

待機関数は、FindFirstChangeNotification 関数から返されるハンドルを使い、指定されたディレクトリ、またはサブツリーを監視します。監視中のディレクトリやサブツリーでフィルタ条件が 1 つでも満たされると待機操作が終了します。 待機操作が終了すると、アプリケーションはこの条件に応答し、FindNextChangeNotification 関数とその他適切な関数を呼び出してディレクトリの監視を続行することができます。ハンドルが不要になった場合は、FindCloseChangeNotification 関数を使って終了することができます。

etc

Windows NT/2000:Windows NT 3.1 以降を使います。 Windows 95/98:Windows 95 以降を使います。 Windows CE:対応していません。 ヘッダー:winbase.h で宣言されています。 インポートライブラリ:kernel32.lib を使います。 Unicode:Windows NT/2000 では Unicode 版と ANSI 版が実装されています。

複数のフォルダを監視する

複数のフォルダを監視する場合、複数のハンドルを配列に格納し、WaitForMultipleObjectsに入れる。

http://www.kumei.ne.jp/c_lang/intro2/no_101.htm

のサンプルコードがちょっと参考になる。

関連リンク