7

(Delphi 2010を使用しているWindowsで)実際にすべてのファイルをトラバースせずにディレクトリ内のファイルの数を取得する方法はありますか?

ファイルシステムのインデックス作成操作中にプログレスバーを実装したい。そのため、ディレクトリにファイルがいくつあるかを知る必要があります。

ディレクトリ内のファイル数を取得する最速の方法は何ですか?

4

2 に答える 2

12

Windows7またはServer2008R2で実行している場合は、SysUtilsからFindFirst関数とFindMatchingFile関数を抽出し、前者をハッキングして、FindFirstFileの代わりにFindFirstFileExを使用することをお勧めします。FIND_FIRST_EX_LARGE_FETCH次に、当面の間、(Win32majorversion = 6)および(Win32minorversion> = 1)を条件として、追加のフラグパラメーターを2(MSDNで定義されている)に設定できます。

この設定により、これらのOSのFindFirst/FindNextループの速度が大幅に向上します。最新のドキュメントはDelphiヘルプによって取得されたMicrosoftドキュメントに含まれていないため、詳細については、MSDNでFindFirstFileExを探してください。

TDirectory.GetFilesは最終的にFindFirstを呼び出すように見えるので、独自のコードを単純化する以外に多くの利点を購入することはありません。

于 2009-10-30T17:49:54.383 に答える
8

最速の方法は、IOutils.pasにあるTDirectory.GetFilesメソッドを使用することだと思います。ディレクトリ内の(表示される)ファイルの数はユーザーごとに異なる可能性があるため、何らかの方法で取得する数だけが存在する可能性はごくわずかです。

FindFirst / FindNextアプローチ(上記のメソッドでラップされている)は、実際にはファイルをトラバースせず、テーブル内のエントリのみをトラバースするため、予想よりも高速になる可能性があります。

于 2009-10-30T10:28:51.277 に答える