FindFirstChangeNotificationA 関数 (fileapi.h)

変更通知ハンドルを作成し、初期変更通知フィルター条件を設定します。 指定したディレクトリまたはサブツリーでフィルター条件に一致する変更が発生すると、通知ハンドルの待機は成功します。 関数は、指定したディレクトリ自体に対する変更を報告しません。

この関数は、待機条件を満たす変更を示すものではありません。 通知の一部として特定の変更に関する情報を取得するには、
ReadDirectoryChangesW 関数。

構文

HANDLE FindFirstChangeNotificationA(
  [in] LPCSTR lpPathName,
  [in] BOOL   bWatchSubtree,
  [in] DWORD  dwNotifyFilter
);

パラメーター

[in] lpPathName

監視するディレクトリの完全パス。

相対パスまたは空の文字列を指定することはできません。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前もって指定しなくても、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 名前付けファイル、パス、および名前空間 」の「パスの最大長制限」セクションを参照してください。

[in] bWatchSubtree

このパラメーターが TRUE の場合、関数は指定したディレクトリにルート化されたディレクトリ ツリーを監視します。 FALSE の場合は、指定したディレクトリのみを監視します。

[in] dwNotifyFilter

変更通知待機を満たすフィルター条件。 このパラメーターには、次の 1 つ以上の値を指定できます。

説明
FILE_NOTIFY_CHANGE_FILE_NAME
0x00000001
監視対象のディレクトリまたはサブツリーでファイル名が変更されると、変更通知の待機操作から制御が戻ります。 ファイル名の変更とは、ファイル名の変更、作成、削除を指します。
FILE_NOTIFY_CHANGE_DIR_NAME
0x00000002
監視対象のディレクトリまたはサブツリーでディレクトリ名を変更すると、変更通知待機操作が返されます。 変更には、ディレクトリの作成または削除が含まれます。
FILE_NOTIFY_CHANGE_ATTRIBUTES
0x00000004
監視対象のディレクトリまたはサブツリーで属性が変更されると、変更通知の待機操作から制御が戻ります。
FILE_NOTIFY_CHANGE_SIZE
0x00000008
監視対象のディレクトリまたはサブツリーでファイル サイズが変更されると、変更通知の待機操作から制御が戻ります。 オペレーティング システムでファイル サイズの変更が検出されるのは、ファイルがディスクに書き込まれたときだけです。 拡張キャッシュを使用するオペレーティング システムでこの変更が検出されるのは、キャッシュが十分にフラッシュされたときだけです。
FILE_NOTIFY_CHANGE_LAST_WRITE
0x00000010
監視対象のディレクトリまたはサブツリーでファイルに対する最終書き込み日時が変更されると、変更通知の待機操作から制御が戻ります。 オペレーティング システムでファイルに対する最終書き込み日時の変更が検出されるのは、ファイルがディスクに書き込まれたときだけです。 拡張キャッシュを使用するオペレーティング システムでこの変更が検出されるのは、キャッシュが十分にフラッシュされたときだけです。
FILE_NOTIFY_CHANGE_SECURITY
0x00000100
監視対象のディレクトリまたはサブツリーでセキュリティ記述子を変更すると、変更通知待機操作が返されます。

戻り値

関数が成功した場合、戻り値は find 変更通知オブジェクトへのハンドルです。

失敗した場合の戻り値は、INVALID_HANDLE_VALUE です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

待機関数は、FindFirstChangeNotification 関数によって返されるハンドルを使用して、指定されたディレクトリまたはサブツリーを監視できます。 監視対象のディレクトリまたはサブツリーでいずれかのフィルター条件が発生すると、待機が満たされます。

待機が満たされた後、アプリケーションはこの条件に応答し、 FindNextChangeNotification 関数と適切な待機関数を呼び出してディレクトリの監視を続行できます。 ハンドルが不要になった場合は、 FindCloseChangeNotification 関数を使用して閉じることができます。

リモート ファイル システムの FindFirstChangeNotification を呼び出すときに通知が返されない場合があります。

シンボリック リンクの動作 - パスがシンボリック リンクを指している場合、ターゲットの通知ハンドルが作成されます。

シンボリック・リンクを含むディレクトリーの変更通知を受け取るためにアプリケーションが登録されている場合、アプリケーションはシンボリック・リンクが変更されたときにのみ通知され、ターゲット・ファイルは通知されません。

Windows 8とWindows Server 2012では、この関数は次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル はい
SMB 3.0 Transparent Failover (TFO) はい
スケールアウト ファイル共有を含む SMB 3.0 (SO) はい
クラスター共有ボリューム ファイル システム (CsvFS) 備考を参照
Resilient File System (ReFS) はい
 

CsvFs の一時停止/再開時に、アプリケーションで誤検知が発生する可能性があります。

使用例

例については、「 ディレクトリ Change_Notificationsの取得」を参照してください。

注意

fileapi.h ヘッダーは、FindFirstChangeNotification をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー fileapi.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

ディレクトリ管理機能

FindCloseChangeNotification

FindNextChangeNotification

ReadDirectoryChangesW