2009-10-30 27 views
7

有沒有一種方法(在使用Delphi 2010的窗口)獲取一個dirctory中的文件數量而不實際遍歷所有文件?如何有效檢索目錄中的文件數量?

我想在某些文件系統索引操作過程中實現進度欄。出於這個原因,我需要知道目錄中有多少個文件。

什麼是獲取目錄中文件數量的最快方法?

回答

8

我認爲最快的方法是使用位於IOutils.pas中的TDirectory.GetFiles方法。由於每個用戶目錄中(可見)文件的數量可能不同,因此只有一個很小的可能性,即只是以某種方式檢索數字。

FindFirst/FindNext方法(包裝在上面的方法中)實際上並不遍歷文件,它只遍歷表中的條目,所以它可能比預期的要快。

10

如果您在Windows 7或Server 2008 R2上運行,我建議從SysUtils中提取FindFirst和FindMatchingFile函數,並且黑客使用FindFirstFileEx而不是FindFirstFile。然後,您可以將此附加標誌參數設置爲2(在MSDN中定義爲FIND_FIRST_EX_LARGE_FETCH),並且該設置暫時以(Win32majorversion = 6)和(Win32minorversion> = 1)爲條件。

此設置會在這些操作系統上爲FindFirst/FindNext循環產生非常顯着的速度增加。有關更多詳細信息,請在MSDN上查找FindFirstFileEx,因爲最新文檔不在Delphi幫助檢索的Microsoft文檔中。

TDirectory.GetFiles最終似乎調用FindFirst,所以除了簡化自己的代碼之外,不會爲您帶來太多優勢。

+2

+1有趣! – jpfollenius

+0

您也可以使用FindExInfoBasic信息級別,它將停用檢索舊的短文件名 –

相關問題