ホームページ >バックエンド開発 >C++ >FSCTL_ENUM_USN_DATA を使用して NTFS ボリューム上のファイル変更を効率的に検出するにはどうすればよいですか?

FSCTL_ENUM_USN_DATA を使用して NTFS ボリューム上のファイル変更を効率的に検出するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 00:59:29786ブラウズ

How Can FSCTL_ENUM_USN_DATA Be Used to Efficiently Detect File Changes on an NTFS Volume?

NTFS ボリューム上のファイル変更の効率的な検出

はじめに

NTFS ボリューム上の変更されたファイルの検出は、特に多数のファイルが存在するボリュームの場合、困難な場合があります。ファイルとディレクトリ。この記事では、FSCTL_ENUM_USN_DATA API を使用して、削除、変更、新規追加などの特定の変更を識別する効率的なアプローチについて説明します。

FSCTL_ENUM_USN_DATA を使用する

FSCTL_ENUM_USN_DATA を使用すると、ボリューム上のファイルを列挙できます。現在の状態と USN (更新シーケンス番号)。現在の USN を以前の値と比較することで、ファイルが変更されたかどうかを判断できます。

コードのデモ

提供されている C のサンプル プログラムは、FSCTL_ENUM_USN_DATA を使用して、ファイル上で「test.txt」という名前のファイルを検索します。 C ボリュームにアクセスし、その変更に関する情報を取得します。指定された名前と一致するファイルをチェックし、見つかった各ファイルとその親ディレクトリに関する詳細情報を提供します。

このアプローチの利点

  • 高速処理: FSCTL_ENUM_USN_DATA は、通常、高いパフォーマンスを提供します。古いシステムであっても、1 秒あたり 6000 件を超えるレコードが返されます。
  • 包括的なデータ: 返されるデータにはファイル属性、ファイル フラグ、USN が含まれており、ファイル コンテンツ、メタデータ、またはその両方の変更を検出できます。
  • 選択的フィルタリング: ファイルの種類または特定のパスを指定して、関心のある変更に焦点を当てることができます。

制限事項

  • 完全なファイル パスの取得: 取得されるレコードには次のものが含まれます。親ファイルの参照番号。フルパスを再構築するには、これらの番号をディレクトリのファイル ID と関連付ける必要があります。これは、単一の大きなバッファを使用するか、必要に応じてディレクトリ レコードを読み取ることによって処理できます。
  • パス フィルタリング: FSCTL_ENUM_USN_DATA は、パスに基づく直接フィルタリングを提供しません。検索を特定のディレクトリに制限するには、ディレクトリ レコードを取得した後に処理します。

結論

FSCTL_ENUM_USN_DATA は、NTFS ボリューム上のファイル変更を検出するための非常に効率的かつ効果的な方法です。 。この API を適切なデータ フィルタリング手法と併用することで、特定の要件に合った堅牢なファイル監視システムを開発できます。

以上がFSCTL_ENUM_USN_DATA を使用して NTFS ボリューム上のファイル変更を効率的に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。