4

ユースケース: サードパーティのアプリケーションは、別のプログラムによって生成されたテキスト ファイルをプログラムで監視したいと考えています。テキスト ファイルには、更新中に分析するデータが含まれています。

FileSystemWatcher に関連するこの質問に対する多くの回答を見つけていますが、Windows マシン用のアプリケーションを作成していて、.NET がインストールされていることを保証できないとしましょう。

これに利用できるライブラリはありますか、それとも独自のソリューションを展開する必要がありますか?

ありがとう。

4

4 に答える 4

8

FindFirstChangeNotificationを使用してディレクトリを監視でき、どのウィンドウでも機能します。
ファイルの場所がわかっている場合は効率的です。それ以外の場合は、以下で説明する仮想ドライバー/Filemon を使用して、システム上の任意の場所の変更を確認できます。

サンプルコードはこちら

于 2008-10-23T22:30:22.057 に答える
5

より簡単な解決策は、ファイルの最終変更のタイム スタンプを確認することです。

_stat64() 関数を使用してこれを行うと、クロスプラットフォーム ソリューションになります。

コード例:

struct __stat64 fileinfo;

if(-1 != _stat64(filename, &fileinfo)
   return fileinfo.st_mtime;
于 2008-10-23T22:49:37.587 に答える
1

これは、sysinternals (現在は MS) の FileMon が行うこととよく似ています。これは、動的に読み込まれる仮想デバイス ドライバーを作成することによって行われます。彼らはここでそれがどのように機能するかについての良い説明を持っています:

FileMon の仕組み

Windows 9x ドライバーの場合、FileMon の心臓部は仮想デバイス ドライバー Filevxd.vxd にあります。これは動的にロードされ、初期化時に VxD サービス IFSMGR_InstallFileSystemApiHook を介してファイル システム フィルタをインストールし、すべてのファイル システム要求の呼び出しチェーンに自身を挿入します。Windows NT では、FileMon の心臓部は、ドライブに向けられたすべての IRP および FastIO 要求を FileMon が認識できるように、フィルター デバイス オブジェクトを作成してターゲット ファイル システム デバイス オブジェクトにアタッチするファイル システム ドライバーです。FileMon は、open、create、または close 呼び出しを検出すると、内部ファイル ハンドルとファイル パス名の間のマッピングとして機能する内部ハッシュ テーブルを更新します。ハンドル ベースの呼び出しを検出すると、ハッシュ テーブルでハンドルを検索して、表示用の完全な名前を取得します。

于 2008-10-23T22:52:53.587 に答える
1

次のようになります:特定のファイルを開いたプロセスを追跡する

再び sysinternalがいくつかのヒントとツールを提供しました

于 2008-10-23T22:31:38.840 に答える