私はこのような振る舞いでサービスを実装するタスクを持っています。 私の質問は次のとおりです:Windowsインデックスサービスの仕組みは?
どのようなファイルがすでに索引付けされていたのか、またどのファイルが変更され、それらを再索引付けする必要があるのかを覚えていますか?
また、私はこのサービスを停止してから数日後に起動しても動作します。 ファイルに関する情報を持つ独自のデータベースを持っていますか?
は
私はこのような振る舞いでサービスを実装するタスクを持っています。 私の質問は次のとおりです:Windowsインデックスサービスの仕組みは?
どのようなファイルがすでに索引付けされていたのか、またどのファイルが変更され、それらを再索引付けする必要があるのかを覚えていますか?
また、私はこのサービスを停止してから数日後に起動しても動作します。 ファイルに関する情報を持つ独自のデータベースを持っていますか?
は
通常、インデックスサービスがFindFirstChangeNotification
への呼び出しによって作成されたハンドルにWaitForSingleObject/WaitForMultipleObjects
を使用してバックグラウンドに留まり、ありがとうございました。インデックスサービスをシャットダウンする(または既存のディレクトリに使用する)ことをサポートしたい場合は、すべてのファイルに最後に実行されたインデックスのタイムスタンプを確実に保存する必要があります。これを指定ファイルのLastWriteTimeと比較することができます。
編集:ReadDirectoryChangesWと、ファイルを非同期でインデックスする別のスレッドを使用して、変更を見逃してはいけません。インデックスを作成するすべてのファイルに対して新しいスレッドを作成するか、ジョブキューと一定量のワーカースレッド(好ましくは1または2)を使用することができます。
Ok、thnx。 Stop/Startサービスがファイルシステムを再スキャンし、そのデータベースを読み込んで最後のアクティビティから変更された内容を確認した後のようですか? – Oleg
。インデックスを作成したディレクトリ内のすべてのファイルとそのサブディレクトリを繰り返し処理し、LastWrittenTimeをindexersデータベースのタイムスタンプと照合します。 – mschneider
Btw、多くのファイルが変更されて同時に追加された場合の動作通知の一部がサービスのために失われる可能性はありますか?この場合、インデックスが実際ではないことはわかりません。 – Oleg