2010-05-31 13 views
24

वर्तमान में मेरा एप्लिकेशन उपनिर्देशिका की सूची प्राप्त करने के लिए स्ट्रिंग [] subdirs = Directory.GetDirectories (पथ) का उपयोग करता है, और अब मैं नवीनतम पथ को निकालना चाहता हूं (अंतिम संशोधित) सूची में उपनिर्देशिका।नवीनतम (अंतिम संशोधित) निर्देशिका कैसे प्राप्त करें [सी #]

इसे पूरा करने का सबसे आसान तरीका क्या है? (दक्षता एक प्रमुख चिंता का विषय नहीं है - लेकिन मजबूती है)

+0

यह पुनरावर्ती (सभी सन्तान) होना चाहिए? –

उत्तर

12

LINQ

DateTime lastHigh = new DateTime(1900,1,1); 
string highDir; 
foreach (string subdir in Directory.GetDirectories(path)){ 
    DirectoryInfo fi1 = new DirectoryInfo(subdir); 
    DateTime created = fi1.LastWriteTime; 

    if (created > lastHigh){ 
     highDir = subdir; 
     lastHigh = created; 
    } 
} 
1

आप Directory.GetLastWriteTime उपयोग कर सकते हैं (या Directory.GetLastWriteTimeUtc, यह वास्तव में इस मामले में कोई फर्क नहीं पड़ता जब तुम सिर्फ रिश्तेदार तुलना कर रहे हैं)।

हालांकि आप ओएस द्वारा रिपोर्ट किए गए "संशोधित" समय को देखना चाहते हैं, या फिर आप हाल ही में संशोधित फ़ाइल के साथ निर्देशिका को के अंदर निर्देशिका खोजना चाहते हैं? वे हमेशा मेल नहीं खाते हैं (यानी, ओएस हमेशा फ़ाइल को संशोधित करते समय "अंतिम संशोधित" समय वाली निर्देशिका को अद्यतन नहीं करता है)।

+0

हाल ही में फोल्डर (फाइल अंदरूनी सूत्र अप्रासंगिक हैं) – Shaitan00

+0

उस स्थिति में, 'Directory.GetLastWriteTime' वह है जो आप के बाद हैं। लारामी का समाधान भी काम करता है, जो कि मैं कह रहा था (वह आपके लिए कोड लिखने के लिए बहुत दयालु था;) –

37

गैर पुनरावर्ती:

new DirectoryInfo(path).GetDirectories() 
         .OrderByDescending(d=>d.LastWriteTimeUtc).First(); 

रिकर्सिव:

new DirectoryInfo(path).GetDirectories("*", 
    SearchOption.AllDirectories).OrderByDescending(d=>d.LastWriteTimeUtc).First(); 
0

आप एक खिड़कियों सेवा का निर्माण कर रहे हैं का उपयोग किए बिना और आप यह सूचना प्राप्त जब एक नया चाहते हैं फ़ाइल या निर्देशिका बनाई गई है आप FileSystemWatcher का भी उपयोग कर सकते हैं। स्वीकार्य रूप से आसान नहीं है, लेकिन साथ खेलने के लिए दिलचस्प है। :)

+0

-1 यह केवल तभी काम करता है जब एप्लिकेशन चल रहा है, जबकि निर्देशिका चल रही है, जो जरूरी नहीं है प्रश्न में दी गई जानकारी के आधार पर। –

+2

यही कारण है कि मैंने एक विंडोज़ सेवा निर्दिष्ट की, जिसका अर्थ यह है कि यह हर समय चल रहा है। –

+0

यह जरूरी नहीं है कि यह सच है। सेवाओं को शुरू और बंद किया जा सकता है, या अंतःक्रियात्मक रूप से चलाया जा सकता है (मैं तर्क दूंगा कि यह एक खराब डिजाइन है, लेकिन यह एक अलग मुद्दा है)। उदाहरण के लिए, एप्लिकेशन * स्थापित * से पहले एक फ़ोल्डर बनाया गया था, तो यह विधि अनुप्रयोग को सूचित नहीं करेगी। –

3

चेतावनी दी रहें:

उदहारण के लिए: आप सही जानकारी प्राप्त करने के लिए वस्तु अपने निर्देशिका जानकारी पर Refresh() कॉल करने के लिए आवश्यकता हो सकती है

DirectoryInfo fi1 = new DirectoryInfo(subdir); 
fi1.Refresh(); 
DateTime created = fi1.LastWriteTime; 

नहीं तो आप पुरानी जानकारी मिल सकते हैं मैंने किया: Laramie के जवाब में आप के लिए संपादित करनी होगी

"कॉल को रिफ्रेश करने के लिए किया जाना चाहिए विशेषता जानकारी पाने के लिए प्रयास करने से पहले, या जानकारी पुरानी हो जाएगी। "

http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.refresh(v=vs.71).aspx

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