2009-10-30 37 views
7

Có cách nào (trên cửa sổ sử dụng Delphi 2010) để lấy số lượng tệp trong dirctory mà không thực sự duyệt qua tất cả các tệp không?Làm cách nào tôi có thể truy xuất hiệu quả số lượng tệp trong một thư mục?

Tôi muốn triển khai thanh tiến trình trong một số thao tác lập chỉ mục hệ thống tệp. Vì lý do đó tôi cần phải biết có bao nhiêu tệp trong thư mục.

Cách nhanh nhất để lấy số lượng tệp trong thư mục là gì?

Trả lời

8

Tôi nghĩ cách nhanh nhất là sử dụng phương thức TDirectory.GetFiles có trong IOutils.pas. Vì số lượng tệp (có thể nhìn thấy) trong một thư mục có thể khác nhau cho mỗi người dùng, chỉ có một cơ hội nhỏ mà chỉ có một số để truy xuất bằng cách nào đó.

Phương pháp FindFirst/FindNext (được bao bọc trong phương thức trên) không thực sự truyền tải tệp, nó chỉ duyệt qua các mục trong bảng, vì vậy nó có thể nhanh hơn mong đợi.

10

Nếu bạn đang chạy trên Windows 7 hoặc Server 2008 R2, tôi khuyên bạn nên trích xuất các hàm FindFirst và FindMatchingFile từ SysUtils và hack tên cũ để sử dụng FindFirstFileEx thay vì FindFirstFile. Sau đó, bạn có thể đặt tham số cờ bổ sung thành 2 (được định nghĩa trong MSDN là FIND_FIRST_EX_LARGE_FETCH) với cài đặt này được điều chỉnh (Win32majorversion = 6) và (Win32minorversion> = 1), hiện tại.

Cài đặt này tạo ra tốc độ tăng đáng kể cho các vòng FindFirst/FindNext trên các hệ điều hành này. Tìm kiếm FindFirstFileEx trên MSDN để biết thêm chi tiết, vì tài liệu mới nhất không có trong tài liệu của Microsoft được truy xuất bằng trợ giúp Delphi.

TDirectory.GetFiles cuối cùng dường như gọi FindFirst, vì vậy sẽ không mua cho bạn nhiều lợi thế khác ngoài việc đơn giản hóa mã của riêng bạn.

+2

+1 thú vị! – jpfollenius

+0

Bạn cũng có thể sử dụng cấp độ thông tin FindExInfoBasic, nó hủy kích hoạt việc truy xuất tên tệp ngắn cũ –

Các vấn đề liên quan