2009-03-27 7 views
2

ドライブ上のすべてのファイルのリストを取得する必要があります。私は再帰的なソリューションを使用しています。しかし、それは多くの時間がかかります。私はそれがマスターファイルテーブルからNTFSドライブ上のすべてのファイルの名前と場所を取得することは可能ですか?私はそれが非常に速くなると思う。助言がありますか?NTFSボリュームのMFTからファイル名/位置情報を取得する方法はありますか?

答えて

1

再帰的ソリューションを使用してNTFS形式のドライブ上のすべてのファイルの一覧を取得すると、MFTからそれらを取得しています。ファイル名とディレクトリのリストを取得するだけでは、MFTの外側にはディスクIOがほとんどないはずです。

(インターネット上のさまざまな場所から入手可能な)MFTのフォーマットを決定し、それを直接読むためのコードを書く道を行く前に、あなたのコードをプロファイルして、すでにCPUまたはIOにバインドされています。

1

私はMFTの中で何らかの種類のリストのような構造を想像している印象を受けています。

これは該当しません。 MFTはパス名を格納するために一種のb-treeを使用します。ディスク上のディレクトリ構造をスキャンすると、実際にはMFT b-treeを歩いていることになります。あなたがMFTに直接アクセスした場合、あなたがしなければならないことをやっています。

+0

実際、あなたは間違っています。 MFTはbツリーを使用しません。 MFTはレコードのフラットなリストです。 NTFSディレクトリはある種のバイナリツリー(b +ツリー?)を使用します。 MFTを読むことは、無視しなければならない削除されたエントリの量に応じてOPのためのより速い解決策であり、使用可能なパス名を再作成する必要はありません。 –

2

mftを直接検索するツールがあります。これはndffと呼ばれています。私は以前にそれを使用して、それは非常に高速です。

おそらく、あなたが望むことをすることは可能です - 私は同じことをすると思う "Everything"と呼ばれる別のツールがあります - USN変更ジャーナルを使ってインデックスを更新します。

0

はい、あります。program私はオープンソースであり、まさにこれを行います。

どのように動作するのかを調べるにはソースを読むことができますが、基本的に$ MFT内でFILE_NAME attributesを探して、ParentDirectoryフィールドを使用してすべてのファイルの親を取得します。

このようにすれば、どのディレクトリの内容も完全に読み取ることができなくなります。

関連する問題