2009-10-30 13 views
7

क्या वास्तव में सभी फ़ाइलों को घुमाने के बिना एक डाइक्टोरी में फ़ाइलों की संख्या प्राप्त करने के लिए एक तरीका है (डेल्फी 2010 का उपयोग कर विंडोज़ पर)?मैं निर्देशिका में फ़ाइलों की संख्या को कुशलता से कैसे प्राप्त कर सकता हूं?

मैं कुछ फाइल सिस्टम अनुक्रमण ऑपरेशन के दौरान एक प्रगति पट्टी को कार्यान्वित करना चाहता हूं। इसी कारण से मुझे यह जानने की जरूरत है कि निर्देशिका में कितनी फाइलें हैं।

निर्देशिका में फ़ाइलों की संख्या प्राप्त करने का सबसे तेज़ तरीका क्या है?

उत्तर

8

मुझे लगता है कि IOutils.pas में स्थित TDirectory.GetFiles विधि का उपयोग करने का सबसे तेज़ तरीका है। चूंकि एक निर्देशिका में (दृश्यमान) फ़ाइलों की संख्या प्रत्येक उपयोगकर्ता के लिए अलग हो सकती है, इसलिए केवल एक छोटा सा मौका है कि किसी भी तरह से पुनर्प्राप्त करने के लिए केवल एक संख्या है।

FindFirst/FindNext दृष्टिकोण (जो उपर्युक्त विधि में लपेटा गया है) वास्तव में फ़ाइलों को पार नहीं करता है, यह केवल तालिका में प्रविष्टियों को पार करता है, इसलिए यह अपेक्षा से तेज़ हो सकता है।

10

यदि आप विंडोज 7 या सर्वर 2008 आर 2 पर चल रहे हैं, तो मैं SysUtils से FindFirst और FindMatchingFile फ़ंक्शंस निकालने की सलाह देता हूं और FindFirstFile के बजाय FindFirstFileEx का उपयोग करने के लिए पूर्व को हैकिंग करता हूं। फिर आप अतिरिक्त फ्लैग पैरामीटर को 2 (एमएसडीएन में FIND_FIRST_EX_LARGE_FETCH के रूप में परिभाषित) के साथ सेट कर सकते हैं, इस सेटिंग के साथ (Win32majorversion = 6) और (Win32minorversion> = 1), समय के लिए।

यह सेटिंग इन ओएस पर FindFirst/FindNext loops के लिए एक बहुत ही महत्वपूर्ण गति वृद्धि उत्पन्न करती है। अधिक जानकारी के लिए एमएसडीएन पर FindFirstFileEx देखें, क्योंकि नवीनतम दस्तावेज डेल्फी सहायता द्वारा पुनर्प्राप्त माइक्रोसॉफ्ट दस्तावेज में नहीं है।

TDirectory.GetFiles अंततः FindFirst को कॉल करने लगता है, इसलिए आपको अपने कोड को सरल बनाने के अलावा अन्य लाभ नहीं खरीदेंगे।

+2

+1 दिलचस्प! – jpfollenius

+0

आप FindExInfoBasic जानकारी स्तर का भी उपयोग कर सकते हैं, यह पुरानी छोटी फ़ाइल नामों की पुनर्प्राप्ति को निष्क्रिय करता है –

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

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