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


Answers

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

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

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 संस्करण कुछ भी नहीं कहता है और न ही पृष्ठ आपको सृजन या संशोधन समय जैसी चीजों से सॉर्ट करने में मदद करेगा। आपके पास सरणी (यह केवल तार होता है) के बाद वह जानकारी खो जाती है मैं एक तुलनाकर्ता का निर्माण कर सकता हूं जो प्रत्येक फ़ाइल के लिए जांच करेगा, लेकिन इसका अर्थ है कि फाइल सिस्टम को बार-बार पहुंचने का मतलब है जब। गेटफाइल () विधि पहले से ही ऐसा करती है। बहुत अक्षम दिखता है




यदि आप सृजन तिथि की तरह कुछ सॉर्ट करना चाहते हैं, तो आपको शायद DirectoryInfo.GetFiles का उपयोग करना होगा और फिर उपयुक्त अनुकूलता का उपयोग करते हुए परिणामस्वरूप सरणी को सॉर्ट करना होगा।




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



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

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

/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

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

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

/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



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

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

एमएसडीएन जानकारी IComparer इंटरफ़ेस




आप सही हैं, डिफ़ॉल्ट मेरा नाम asc है FileInfo संग्रह से एक आंकड़ा बनाने के लिए मुझे सॉर्ट क्रम बदलना एकमात्र तरीका है।

तब आप डेटासेट से डिफ़ॉल्ट दृश्य का उपयोग कर सकते हैं और निर्देशिका को सॉर्ट विधि के साथ सॉर्ट कर सकते हैं।

यह काफी शामिल है और काफी धीमी है लेकिन मुझे उम्मीद है कि कोई बेहतर समाधान पोस्ट करेगा।