3

ここに記載されているように、mac File System Events APIを使用して、C++で単純なファイルシステムウォッチャーを作成しました:appledeveloperdoc。私の質問はタイトルにあります。変更されたもののパスを取得するにはどうすればよいですか?eventPaths配列は、私が本質的に監視している親ディレクトリ(またはそのセット)のパスのみを提供します。ただし、変更された基になるディレクトリエントリではありません。

コールバックを使用して有用な情報を取得できます。

   static void mycallback(
            ConstFSEventStreamRef streamRef,
            void *clientCallBackInfo,
            size_t numEvents,
            void *eventPaths,
            const FSEventStreamEventFlags eventFlags[],
            const FSEventStreamEventId eventIds[])

たぶん、これらのアイテムの1つから名前を抽出できると思いますか?

編集:

たとえば、ファイルが作成されていることに気付く場合があります。その場合、

kFSEventStreamEventFlagItemCreated

上げられます。しかし、そのアイテムの実際の名前を取得するにはどうすればよいですか?(同様に、アイテムが削除されたときなどの他のイベントの場合)。

編集2:

やりたいことができないと思い始めています。FS技術の概要から:

「重要なポイントは、通知の粒度がディレクトリレベルにあることです。ディレクトリ内の何かが変更されたことだけが通知され、何が変更されたかは通知されません。」

別名。バガー。

乾杯、

ベン。

4

2 に答える 2

4

実際には、これは可能ですが、10.7以降でのみ可能です。FSEventStreamCreateのkFSEventStreamCreateFlagFileEventsフラグを確認してください(ドキュメントはこちら)。

于 2012-10-08T06:31:02.803 に答える
0

残念ながら、私が発見したように、それは不可能です。説明/動機については、FS技術の概要を参照してください。回避策は、ディレクトリのスナップショットを作成し、変更が検出されるたびに、新しいスナップショットを作成して元のスナップショットと比較し、変更された特定のディレクトリエントリ(およびその名前)を見つけることです。

編集:それは> = 10.7で可能です(選択された答えを参照してください)

于 2012-10-03T07:55:41.997 に答える