Win32API ファイルシステムの変更を検知する FindFirstChangeNotification FindNextChangeNotification FindCloseChangeNotification
ファイルやディレクトリの名前や属性、サイズ、書き込み日時、セキュリティ属性変更の変更を検知する
使用するAPI
HANDLE FindFirstChangeNotification( LPCTSTR lpPathName, // 監視するディレクトリの名前へのポインタ BOOL bWatchSubtree, // ディレクトリやディレクトリツリーの監視用の // フラグ DWORD dwNotifyFilter // 監視のためのフィルタ条件 );
dwNotifyFilterに設定可能な定数
FILE_NOTIFY_CHANGE_FILE_NAME | 監視中のディレクトリ、またはサブツリーでファイル名が変更されると、変更通知の待機操作から制御が戻る。ファイル名の変更とは、ファイル名の再作成( 変更)、作成、削除を指す。 |
FILE_NOTIFY_CHANGE_DIR_NAME | 監視中のディレクトリ、またはサブツリーでディレクトリ名が変更されると、変更通知の待機操作から制御が戻る。ディレクトリ名の変更とは、ディレクトリの作成と削除を指。 |
FILE_NOTIFY_CHANGE_ATTRIBUTES | 監視中のディレクトリ、またはサブツリーで属性が変更されると、変更通知の待機操作から制御が戻る。 |
FILE_NOTIFY_CHANGE_SIZE | 監視中のディレクトリまたはサブツリーでファイルサイズが変更されると、変更通知の待機操作から制御が戻る。 |
FILE_NOTIFY_CHANGE_LAST_WRITE | 監視中のディレクトリまたはサブツリーでファイルに対する前回の書き込み日時が変更されると、変更通知の待機操作から制御が戻る。 |
#include <windows.h> int main() { char *lpPathName = "C:\\"; HANDLE hNotif; DWORD dwFilter; dwFilter = 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; hNotif = FindFirstChangeNotification( lpPathName, TRUE, dwFilter); if (hNotif == INVALID_HANDLE_VALUE) { printf("FindFirstChangeNotification failed\n"); return 1; } do { printf("Waiting...\n"); WaitForSingleObject(hNotif, INFINITE); printf("Change Notice\n"); } while (FindNextChangeNotification(hNotif)); FindCloseChangeNotification(hNotif); return 0; }