ドライブ上のすべてのファイルのリストを取得する必要があります。私は再帰的なソリューションを使用しています。しかし、それには多くの時間がかかります。マスター ファイル テーブルから NTFS ドライブ上のすべてのファイルの名前と場所を取得することは可能ですか? とても速いと思います。助言がありますか?
4 に答える
mftを直接検索するツールがあります。これはndffと呼ばれます。私は以前にそれを使用しました、そしてそれは非常に速いです。
おそらく、あなたがやりたいことをすることは可能です-私が推測する「Everything」と呼ばれる別のツールがあります-それはまた、そのインデックスを更新するためにUSN変更ジャーナルを使用します。
再帰的なソリューションを使用してNTFSフォーマットのドライブ上のすべてのファイルのリストを取得すると、MFTからそれらを取得します。ファイル名とディレクトリのリストを取得するだけの場合、MFTの外部にはディスクIOがほとんどないはずです。
MFT(インターネット上のさまざまな場所から入手可能)の形式を決定し、それを直接読み取るためのコードを作成する前に、コードをプロファイリングして、まだCPUまたはIOではないことを確認する必要があります。バウンド。
あなたは、MFT である種のリストのような構造を想像しているような印象を受けました。これは、シークなしまたは最小限のシークで一度に読み取ることができます。
これはそうではありません。MFT は、一種の b ツリーを使用してパス名を格納します。ディスク上のディレクトリ構造をスキャンすると、実際には MFT の b ツリーをたどっています。MFT に直接アクセスした場合に行う必要があることを実行しています。
はい、あります。私がオープンソース化したばかりのプログラムは、まさにこれを行います。
ソースを読んで動作を確認できますが、基本的には $MFT 内のFILE_NAME
属性ParentDirectory
を検索し、フィールドを使用してすべてのファイルの親を取得します。
そうすれば、ディレクトリの内容の読み取りを完全に回避できます。