2009-10-20 9 views
8

मैंने सोचा था कि FindFirst को वर्णमाला क्रम में फाइलें मिलीं लेकिन हाल ही में मुझे यह पता चल रहा है कि अधिकांश भाग के लिए यह सच है, कुछ फाइलें वर्णानुक्रम में नहीं हैं।क्या पता है सबसे पहले वर्णमाला क्रम में फाइलें वापस लौटना चाहिए?

if FindFirst(AProgramPath, faAnyFile, ASearchRec) = 0 then 
repeat 
    AFilename := ASearchRec.name; 
until FindNext(ASearchRec) <> 0; 
FindClose(ASearchRec); 

यहां एक विशिष्ट फ़ोल्डर में लगभग 300 टेक्स्ट फाइलों के साथ सभी फाइलें लगभग 8-10 सही वर्णमाला क्रम में लौटा दी जाती हैं।

यदि findfirst वर्णमाला क्रम में फ़ाइलों को वापस नहीं करता है, तो क्या एक तरीका है जिसे फ़ोल्डर्स सामग्री को वर्णानुक्रम में क्रमबद्ध करने के लिए उपयोग किया जा सकता है ताकि पहली बार वर्णमाला क्रम में फ़ाइलों को वापस लाया जा सके?

सादर,

विधेयक

उत्तर

11

FindFirst समारोह खोज परिणामों का कोई छंटाई करता है, लेकिन आप एक TStringList का उपयोग करके फ़ाइलें आदेश कर सकते हैं।

Procedure GetOrderFiles(); 
var 
ListFiles : TStringList; 
result : integer; 
ASearchRec: TSearchRec; 
begin 
ListFiles   := TStringList.Create; 
try 
    ListFiles.sorted := True; 
    result  := findFirst(AProgramPath,faAnyFile,ASearchRec); 
    try 
    while result = 0 do 
    begin 
     if (ASearchRec.name <> '.') and (ASearchRec.name <> '..') then 
     ListFiles.add(ASearchRec.name); 
     result:=FindNext(ASearchRec); 
    end; 
    finally 
    FindClose(ASearchRec); 
    end; 

    //process your files 

    //.... 
finally 
    ListFiles.free; 
end; 
end; 
10

सं देखें documentation:

FindFirstFile समारोह एक खोज संभाल खोलता है और है कि फाइल सिस्टम एक नाम के साथ पाता है पहली फ़ाइल के बारे में जानकारी देता है कि निर्दिष्ट पैटर्न से मेल खाता है। यह एक ही फ़ाइल नाम स्ट्रिंग पैटर्न दिए जाने पर निर्देशिका-लिस्टिंग अनुप्रयोग (जैसे डीआईआर कमांड) में दिखाई देने वाली पहली फ़ाइल या निर्देशिका हो सकती है या नहीं भी हो सकती है। ऐसा इसलिए है क्योंकि FindFirstFile खोज परिणामों की कोई छंटाई नहीं करता है। (जोर जोड़ा)

5

FindFirstFile और FindNextFile निर्देशिका में जो भी ऑर्डर दिखाई देता है, उसे वापस लौटाएं। एनटीएफएस सिस्टम पर, यह मोटे तौर पर वर्णमाला क्रम है। FAT32 जैसे कुछ के लिए, आदेश काफी अप्रत्याशित है (जब तक कोई फ़ाइल हटाई नहीं जाती है, यह सृजन का क्रम है, लेकिन जब कोई फ़ाइल हटा दी जाती है, तो उस निर्देशिका में बनाई गई अगली फ़ाइल हटाए गए स्लॉट का पुन: उपयोग करेगी फ़ाइल)। कुछ रिमोट फाइल सिस्टम के लिए, आदेश भी कम अनुमानित होने की संभावना है।

यह संभव कम से कम कुछ फ़ाइल सिस्टम (उदा। एफएटी/एफएटी 32) के लिए डिस्क पर आइटम सॉर्ट करने के लिए है। डीओएस दिनों में, ऐसा करने के लिए उपयोगिताएं काफी आम थीं, लेकिन मौजूदा सिस्टम के तहत वे अधिकतर पक्ष से बाहर हो गए हैं क्योंकि विंडोज एक्सप्लोरर (और ऐसे) ज्यादातर FindFirstFile/FindNextFile द्वारा प्रदान किए गए क्रम में उन्हें प्रदर्शित करने के बजाय फ़ाइलों को सॉर्ट करते हैं।

आईएमओ, आपको शायद ऐसा करने के बारे में बहुत मुश्किल लगता है। डिस्क पर डेटा को सॉर्ट करने से डॉस के तहत अच्छी तरह से काम किया जाता है, क्योंकि अधिकांश समय पृष्ठभूमि में बहुत कुछ नहीं हो रहा था, इसलिए यदि आप एक निर्देशिका को सॉर्ट करते हैं तो कम से कम थोड़ी देर के लिए इसे सॉर्ट किया जाता है। आजकल, एक विशिष्ट विंडोज बॉक्स में स्टार्टअप पर चलने वाली 20+ प्रक्रियाएं होती हैं, इसलिए यदि आप निर्देशिका को सॉर्ट करते हैं, तो आप किसी भी समय के लिए क्रमबद्ध रहने पर निर्भर नहीं कर सकते हैं।

+0

धन्यवाद-आप ... हाँ मैं डॉस दिनों के बारे में सोच रहा था ... अच्छी सलाह। स्ट्रिंगलिस्ट दृष्टिकोण दिलचस्प है। –

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