2010-09-22 8 views
8

एक और question एक फ़ोल्डर में फ़ाइलों की अधिकतम संख्या के बारे में, मैं किक्या होगा यदि DirectoryInfo.GetFiles()। लंबाई Int32.MaxValue से अधिक है?

DirectoryInfo.GetFiles().Length 

एक System.In32 लौटा रहा है देखा है, लेकिन एक Int32 की अधिकतम मूल्य

2.147.483.647 (Int32.MaxValue) 

है पर, जबकि एनटीएफएस (कई अन्य फाइल सिस्टम) फाइलों की अधिकतम संख्या उससे कहीं अधिक दूर जा सकती है।

यह नेट ढांचे के साथ NTFS पर एक फ़ोल्डर में फ़ाइलों की संख्या प्राप्त करने के लिए संभव है, जब:

NTFS पर यह

4.294.967.295 single files in one folder (probably an Uint32) 

कौन सा मुझे दिलचस्प सवाल की ओर जाता है है फ़ाइलों की संख्या Int32.MaxValue से अधिक है, एक सुरुचिपूर्ण और प्रदर्शन तरीके से?

नोट: यह कोई बात नहीं है। और मुझे पता है, उन फ़ाइलों का एक बहुत कुछ कर रहे हैं;)

+0

क्या आपको वास्तव में एक फ़ोल्डर में int.MaxValue फ़ाइलों से अधिक स्टोर करने की आवश्यकता है? – TalentTuner

उत्तर

6

Array पर एक LongLength संपत्ति है, जो एक long के रूप में लंबाई देता है। वैसे भी, अगर GetFiles रिटर्न से अधिक Int32.MaxValue आइटम, आप समस्याओं वैसे भी एक OutOfMemoryException की तरह होगा ...;)

आप वास्तव में आइटम्स की संख्या की जरूरत नहीं है, मैं आप के बजाय EnumerateFiles विधि का उपयोग करने का सुझाव (में शुरू की 4.0)। यह सभी फाइलनामों को स्मृति में एक बार में नहीं लाता है, इसके बजाय यह उन्हें एक से एक

+0

इसलिए मुझे इन 32.मैक्स (या कम) के ट्रॉफ सेट लूप करना होगा और DirectoryInfo.EnumerateFiles() के परिणाम जोड़ें। गणना(), एक अच्छी और सभ्य तरीके से की तरह? –

+2

यदि आप केवल फाइलों की संख्या चाहते हैं (फाइलनाम स्वयं नहीं), हां, एन्युमेरेटफाइल शायद अधिक कुशल होंगे (और बहुत कम मेमोरी का उपयोग करेंगे) –

संबंधित मुद्दे