5

私は、MacとWindowsの両方で、iTunesライブラリの失われたファイルを見つけるツールを書いている最中です。Macでは、すばらしい「カタログ検索」機能を使用して名前を付けることで、ファイルをすばやく見つけることができます。

ただし、Windowsでは、ファイル名で検索するためのOS APIがないようです(またはありますか?)。

少しグーグルした後、NTFSディレクトリを直接読み取り、スキャンして名前でファイルを見つけるツール(TFindEverythingなど)があることを知りました。

同じことをしたいのですが、最初からやり直す必要はありません(過去にかなりの数のディスクツールを作成しましたが、NTFSを掘り下げるエネルギーはありませんでした)。

おそらく.dllとして、この検索機能を提供する既製のライブラリがあるかどうか疑問に思います。ファイル名を渡して、そのパスを取得します。

または、Windowsインデックスサービスについてはどうでしょうか。少なくとも最近インストールしたXPHomeシステムでこれを試したとき、 [スタート]メニューの[検索]操作で実際にすべてのディレクトリがスキャンされました。これは、完全なデータベースがないことを示しています。私はWindowsユーザーではないので、なぜこれが機能しないのか疑問に思います。

結局のところ、必要な完全な解決策は次のとおりです。検索するファイル名のリストがあり、すべての結果を一度に取得するためにディスク全体を検索する(またはDBを使用する)コードが必要です。たとえば、検索では、検索しているすべてのファイルに対して新しいフルスキャンを開始するべきではありません。そのため、MFTの方法が最適であると思います。これは、すべての名前をすばやく反復して、それぞれを私のリストと比較できるためです。

4

1 に答える 1

5

問題を解決する最善の方法は、WindowsChangeJournalを使用することです。

問題:ボリュームに対して有効になっていない場合、またはボリュームが非NTFSの場合は、フォールバックが必要です(または、NTFSの場合は変更ジャーナルを有効にします)。変更ジャーナルにアクセスするには、管理者権限も必要です。

LowUsn=0でFSCTL_ENUM_USN_DATAおよびDeviceIOControllを使用してファイルを取得します。これはMFTに直接アクセスし、すべてのファイル名を提供されたバッファーに書き込みます。MFTに順次アクセスするため、FindFirstFileAPIよりも高速です。

于 2010-11-22T09:42:23.350 に答える