2010-08-27 12 views
6

मेरे पास बड़ी निर्देशिकाएं हैं, और मैं जितनी जल्दी हो सके सभी फ़ाइलों को पढ़ना चाहूंगा। मेरा मतलब है, निर्देशिकाInfo.GetFiles तेजी से नहीं, लेकिन 'get-clusters-from-disk-low-level' तेज़।* फास्टस्ट * निर्देशिका लिस्टिंग

बेशक

, .NET 2.0, सी #

इसी प्रकार के प्रश्न यहाँ था, लेकिन इस दृष्टिकोण किसी भी अच्छा नहीं था:

C# Directory listing massive directory

किसी FindFirst/FindNext पर PInvoke का सुझाव दिया। किसी ने कोशिश की और परिणाम साझा करने में सक्षम है?

+0

परावर्तक यह अंततः DirectoryInfo.GetFiles तरह लग रहा है वैसे भी FindFirstFile/FindNextFile kernel32 कॉल करने पर निर्भर करता का उपयोग करना। –

उत्तर

5

"सामान्य" दृष्टिकोण के लिए, मूल रूप से सबकुछ FindFirstFile/FindNextFile तक उबाल जाता है, तो आप वास्तव में उससे अधिक तेज़ नहीं होते हैं ... और यह सुपर-टर्बो-फास्ट नहीं है।

यदि आप वास्तव में जरूरत गति, मैन्युअल MFT पढ़ने पर गौर - लेकिन जानते हैं कि यह व्यवस्थापक विशेषाधिकार की आवश्यकता है, और तोड़ने के लिए जब भी NTFS अद्यतन हो जाता है की संभावना है (और, ओह, हाँ, गैर NTFS के लिए काम नहीं करेगा फ़ाइल सिस्टम)। आप this code पर एक नज़र डालना चाहते हैं जिसमें USN और एमएफटी सामान हैं।

हालांकि, शायद एक अलग समाधान है। यदि आपका ऐप लगातार चल रहा है और बदलावों को लेने की जरूरत है, तो आप एक धीमी FindFirstFile/FindNextFile पास करके शुरू कर सकते हैं, और फिर अद्यतनों के बारे में सूचित होने के लिए निर्देशिका परिवर्तन अधिसूचना समर्थन का उपयोग करें ... जो सीमित उपयोगकर्ताओं के लिए काम करता है, और ' टी फाइल सिस्टम संरचनाओं पर निर्भर नहीं है।

1

this DirectoryManager जैसे कुछ का उपयोग करने का प्रयास करें और अपनी आवश्यकताओं से परिष्कृत करें। .NET Framework GetDirectories() या GetFiles() से तेज़ी से काम करता है क्योंकि हमने क्रॉस-प्लेटफ़ॉर्म चेकिंग और अनुकूलन को छोड़ दिया है।

+2

बहुत अच्छी छोटी कक्षा, यह 'FindFirstFile/FindNextFile' का उपयोग करती है। व्यक्तिगत रूप से मैं किसी अन्य साइट से जोड़ने के बजाय कोड की एक प्रति जोड़ दूंगा, बस अगर कोई नीचे चला जाता है। – Thymine

+5

@ यूजीन चेवरडा निर्देशिका प्रबंधक लिंक अब काम नहीं करता है: पी –

3

सर्वोत्तम प्रदर्शन के लिए, Z /QueryDirectoryFile के रूप में प्रलेखित NtQueryDirectoryFile को P/Invoke करना संभव है।

(डिस्क सीधे पहुँचने और कच्चे फाइल सिस्टम संरचनाओं पढ़ने सीधे, जो आमतौर पर व्यावहारिक नहीं है की वह कम।)

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