2009-10-30 2 views
7

Есть ли способ (на окнах с использованием Delphi 2010), чтобы получить количество файлов в dirctory без фактического прохождения всех файлов?Как я могу эффективно получить количество файлов в каталоге?

Я хочу реализовать индикатор выполнения во время некоторой операции индексирования файловой системы. По этой причине мне нужно знать, сколько файлов находится в каталоге.

Каков самый быстрый способ получить количество файлов в каталоге?

ответ

8

Я думаю, что самый быстрый способ - использовать метод TDirectory.GetFiles, расположенный в IOutils.pas. Поскольку количество (видимых) файлов в каталоге может быть разным для каждого пользователя, есть только крошечный шанс, что есть как раз номер, который нужно каким-то образом получить.

Подход FindFirst/FindNext (который обернут описанным выше способом) фактически не перемещает файлы, он перемещает только записи в таблице, поэтому может быть быстрее, чем ожидалось.

10

Если вы работаете в Windows 7 или Server 2008 R2, я рекомендую извлечь функции FindFirst и FindMatchingFile из SysUtils и взломать первый, чтобы использовать FindFirstFileEx вместо FindFirstFile. Затем вы можете установить параметр дополнительных флагов равным 2 (определенный в MSDN как FIND_FIRST_EX_LARGE_FETCH) с этим параметром, обусловленным (Win32majorversion = 6) и (Win32minorversion> = 1), пока.

Этот параметр обеспечивает очень значительное увеличение скорости для циклов FindFirst/FindNext на этих ОС. Ищите FindFirstFileEx на MSDN для более подробной информации, так как последняя документация не содержится в документации Microsoft, полученной с помощью справки Delphi.

TDirectory.GetFiles, в конце концов, кажется, вызывает FindFirst, поэтому вы не будете покупать больше преимуществ, чем упрощать свой собственный код.

+2

+1 интересный! – jpfollenius

+0

Вы также можете использовать информационный уровень FindExInfoBasic, он дезактивирует поиск старых коротких имен файлов –

Смежные вопросы