.NET में निर्माण की तारीख से फ़ाइलें प्राप्त करना


92

मेरे पास एक फ़ोल्डर है जिसमें कई फाइलें हैं। क्या उनकी निर्माण तिथि / समय के अनुसार निर्देशिका में फ़ाइल नाम प्राप्त करने का कोई आसान तरीका है?

यदि मैं उपयोग करता हूं Directory.GetFiles(), तो यह उनके फ़ाइल नाम द्वारा छांटी गई फाइलों को लौटाता है।


मुझे एक ऐसा ही प्रश्न मिला: stackoverflow.com/questions/52842/sorting-directory-getfiles
सेंसेफुल

4
GetFiles () सॉर्ट नहीं करता है , उन्हें नाम से आदेश दिया जाना एक दुर्घटना है। बस अपने आप को छाँटें।
हंस पैसेंट

जवाबों:


198

यह आपके लिए काम कर सकता है।

using System.Linq;

DirectoryInfo info = new DirectoryInfo("PATH_TO_DIRECTORY_HERE");
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();
foreach (FileInfo file in files)
{
    // DO Something...
}

'System.IO.FileInfo [] में' ऑर्डरबाय 'की परिभाषा नहीं है
उमैर जब्बार

2
यह एक विस्तार विधि है ... msdn.microsoft.com/en-us/library/bb383977.aspx
Ivo

12
मुझे लगता है कि ToArray () विधि को कॉल करने की कोई आवश्यकता नहीं है।
इवो

एक्सटेंशन विधियों / LINQ का उपयोग किए बिना AnyIdeas क्योंकि मैं .NET 2.0 को लक्षित कर रहा हूं
प्रतीक

10
वहाँ किसी भी मौका निर्देशिका में फ़ाइलों (सहित डेलाइट सेविंग टाइम) विभिन्न समय क्षेत्रों में बनाया जा सकता है अगर info.GetFiles () के उपयोग पर विचार OrderBy (पी => p.CreationTimeUtc) के बजाय CreationTime।
स्टीव

46

आप Linq का उपयोग कर सकते हैं

var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);

2
DirectoryInfo समाधान बहुत तेज़ है तो यह (विशेष रूप से नेटवर्क पथ के लिए)
jing

8

यदि आप LINQ का उपयोग नहीं करना चाहते हैं

// Get the files
DirectoryInfo info = new DirectoryInfo("path/to/files"));
FileInfo[] files = info.GetFiles();

// Sort by creation-time descending 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2)
{
    return f2.CreationTime.CompareTo(f1.CreationTime);
});

4

यह अंतिम संशोधित तिथि और उसकी आयु लौटाता है।

DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)

1

@jing: "DirectoryInfo समाधान बहुत तेज़ है तो यह (विशेष रूप से नेटवर्क पथ के लिए)"

मैं इसकी पुष्टि नहीं कर सकता। ऐसा लगता है जैसे Directory.GetFiles किसी फ़ाइल सिस्टम या नेटवर्क कैश को ट्रिगर करता है। पहले अनुरोध में थोड़ा समय लगता है, लेकिन निम्नलिखित अनुरोध बहुत तेज़ होते हैं, भले ही नई फाइलें जोड़ी गई हों। अपने परीक्षण में मैंने एक Directory.getfiles और एक जानकारी की। एक ही पैटर्न के साथ GGFiles और दोनों समान रूप से चलते हैं

GetFiles  done 437834 in00:00:20.4812480
process files  done 437834 in00:00:00.9300573
GetFiles by Dirinfo(2)  done 437834 in00:00:20.7412646

1

यदि प्रदर्शन एक समस्या है, तो आप MS_DOS में इस कमांड का उपयोग कर सकते हैं:

dir /OD >d:\dir.txt

यह आदेश ** d: ** रूट में dir.txt फ़ाइल जनरेट करता है , जिसमें सभी फ़ाइलें दिनांक के अनुसार क्रमबद्ध हैं। और फिर अपने कोड से फाइल को पढ़ें। इसके अलावा, आप * और?


0
            DirectoryInfo dirinfo = new DirectoryInfo(strMainPath);
            String[] exts = new string[] { "*.jpeg", "*.jpg", "*.gif", "*.tiff", "*.bmp","*.png", "*.JPEG", "*.JPG", "*.GIF", "*.TIFF", "*.BMP","*.PNG" };
            ArrayList files = new ArrayList();
            foreach (string ext in exts)
                files.AddRange(dirinfo.GetFiles(ext).OrderBy(x => x.CreationTime).ToArray());
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.