[.net] सॉर्टिंग निर्देशिका। गेटफाइल ()



Answers

.NET 2.0 में, आपको FileSystemInfos को सॉर्ट करने के लिए Array.Sort का उपयोग करना होगा।

इसके अतिरिक्त, आप तुलना के लिए कक्षा घोषित करने से बचने के लिए एक तुलनात्मक प्रतिनिधि का उपयोग कर सकते हैं:

DirectoryInfo dir = new DirectoryInfo(path);
FileSystemInfo[] files = dir.GetFileSystemInfos();

// sort them by creation time
Array.Sort<FileSystemInfo>(files, delegate(FileSystemInfo a, FileSystemInfo b)
                                    {
                                        return a.LastWriteTime.CompareTo(b.LastWriteTime);
                                    });
Question

System.IO.Directory.GetFiles() एक string[] देता है string[] । लौटाए गए मूल्यों के लिए डिफ़ॉल्ट क्रम क्रम क्या है? मैं नाम से मान रहा हूं, लेकिन यदि ऐसा है तो वर्तमान संस्कृति इसका कितना प्रभाव डालती है? क्या आप इसे सृजन तिथि की तरह बदल सकते हैं?

अद्यतन: एमएसडीएन बताता है कि सॉर्ट ऑर्डर की गारंटी 3.5 के लिए नहीं है, लेकिन पृष्ठ का 2.0 संस्करण कुछ भी नहीं कहता है और न ही पृष्ठ आपको सृजन या संशोधन समय जैसी चीजों से सॉर्ट करने में मदद करेगा। आपके पास सरणी होने के बाद वह जानकारी खो जाती है (इसमें केवल स्ट्रिंग होती है)। मैं एक तुलनाकर्ता बना सकता हूं जो प्रत्येक फ़ाइल के लिए जांच करेगा, लेकिन इसका मतलब है कि फ़ाइल सिस्टम को बार-बार एक्सेस करना जब GetFiles () विधि पहले से ही ऐसा करती है। बहुत अक्षम लगता है।




Dim Files() As String
Files = System.IO.Directory.GetFiles("C:\")
Array.Sort(Files)



आप सृजन तिथि द्वारा क्रमबद्ध करने के लिए एक कस्टम आईसीओएमपेयर इंटरफ़ेस लिख सकते हैं, और उसके बाद उसे Array.Sort पर भेज सकते हैं। आप शायद StrCmpLogical को भी देखना चाहते हैं, जो कि सॉर्टिंग एक्सप्लोरर का उपयोग करने के लिए उपयोग किया जाता है (पाठ के साथ सही ढंग से क्रमबद्ध संख्या)।




आप सॉर्टिंग करने के लिए कस्टम iComparer लागू कर सकते हैं। फ़ाइलों के लिए फ़ाइल जानकारी पढ़ें और अपनी पसंद के अनुसार तुलना करें।

IComparer comparer = new YourCustomComparer();
Array.Sort(System.IO.Directory.GetFiles(), comparer);

एमएसडीएन जानकारी आईसीओएमपीयर इंटरफ़ेस




एक विचार है। मुझे एक आसान तरीका मिलना पसंद है और पहले से ही उपलब्ध संसाधनों का उपयोग करने का प्रयास करें। अगर मैं फाइलों को सॉर्ट करना चाहता था तो मैं सिर्फ एक प्रक्रिया बनाउंगा और "डीआईआर [एक्स: \ फ़ोल्डर्स \ सबफोल्डर *। *] / एस / बी / ऑन" को सिस्कल बनाउंगा और आउटपुट कैप्चर करूँगा।

सिस्टम के डीआईआर कमांड के साथ आप इस प्रकार से क्रमबद्ध कर सकते हैं:

/O          List by files in sorted order.
sortorder    N  By name (alphabetic)       S  By size (smallest first)
             E  By extension (alphabetic)  D  By date/time (oldest first)
             G  Group directories first    -  Prefix to reverse order

The /S switch includes sub folders

मुझे यकीन नहीं है कि अगर डी = दिनांक / समय द्वारा LastModifiedDate या FileCreateDate का उपयोग कर रहा है। लेकिन यदि डीआईआर कमांड में आवश्यक सॉर्ट ऑर्डर पहले से ही अंतर्निहित है, तो मुझे सिस्कल को कॉल करके मिल जाएगा। और यह तेज़ है। मैं सिर्फ आलसी लड़का हूँ;)

थोड़ा गुगल करने के बाद मुझे विशेष दिनांक / समय से क्रमबद्ध करने के लिए स्विच मिला: -

/t [[:]TimeField] : Specifies which time field to display or use for sorting. The following list describes each of the values you can use for TimeField. 

Value Description 
c : Creation
a : Last access
w : Last written



msdn कहा गया है कि वापसी मूल्यों पर किसी भी आदेश की कोई गारंटी नहीं है। आपको सॉर्ट () विधि का उपयोग करना होगा।




Links