2010-09-22 34 views
8

By khác question về số lượng tối đa của tập tin trong một thư mục, tôi nhận thấy rằng Điều gì xảy ra nếu DirectoryInfo.GetFiles(). Độ dài vượt quá Int32.MaxValue?

DirectoryInfo.GetFiles().Length 

đang trở lại một System.In32, nhưng giá trị tối đa của một Int32 là

2.147.483.647 (Int32.MaxValue) 

trong khi trên NTFS (một số hệ thống tệp khác) số lượng tệp tối đa có thể vượt xa điều đó.

trên NTFS nó là

4.294.967.295 single files in one folder (probably an Uint32) 

nào tôi dẫn đến câu hỏi thú vị:

Có thể để có được số lượng tập tin trong một thư mục trên NTFS với .NET framework, khi số lượng tệp vượt quá Int32.MaxValue, một cách thanh lịch và hiệu quả?

lưu ý: đây không phải là vấn đề tại sao. và tôi biết, đó là rất nhiều tệp;)

+0

Bạn có thực sự có yêu cầu lưu trữ nhiều tệp int.MaxValue trong một thư mục không? – TalentTuner

Trả lời

6

Có một tài sản LongLength trên Array, trả về độ dài là long. Dù sao, nếu GetFiles lợi nhuận hơn Int32.MaxValue mục, bạn sẽ có vấn đề dù sao ... giống như một OutOfMemoryException;)

Khi bạn không thực sự cần số lượng mặt hàng, tôi đề nghị bạn sử dụng phương pháp EnumerateFiles thay vì (giới thiệu trong 4.0). Nó không lấy tất cả các tên tệp trong bộ nhớ cùng một lúc, thay vào đó nó tìm nạp chúng từng cái một

+0

vì vậy tôi phải lặp lại bộ máng In32.Max (hoặc ít hơn) và thêm kết quả của DirectoryInfo.EnumerateFiles(). Count(), giống như một cách tốt đẹp và nhẹ nhàng? –

+2

Nếu bạn chỉ muốn số lượng tệp (không phải tên tệp), có, EnumerateFiles có thể sẽ hiệu quả hơn (và sẽ sử dụng ít bộ nhớ hơn nhiều) –

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