2010-03-09 15 views
7

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

ऐसा करने का कोई स्मार्ट तरीका?

+3

मुझे डर है कि मैं बिट्स में थोड़ा सा समझ नहीं पा रहा हूं - क्या आप इसे फिर से लिखने का प्रयास कर सकते हैं? –

उत्तर

21

यह मेरी समझ है कि आप किसी विशेष पथ नीचे सबडायरेक्टरियों केवल फ़ाइलें हो सूचीबद्ध करना चाहते है।


static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path) 
{ 
    return from subdirectory in Directory.GetDirectories(path, "*", SearchOption.AllDirectories) 
     where Directory.GetDirectories(subdirectory).Length == 0 
     select subdirectory; 
} 
+0

मुझे पता है कि यह प्रश्न 3 साल पुराना है, लेकिन क्या आप यह समझा सकते हैं कि यह कैसे काम करता है? चूंकि यह सही जवाब है जिसे मैं ढूंढ रहा हूं। मैं बस यह सुनिश्चित करना चाहता हूं कि मैं कोड समझूं। – webdad3

+0

विशेष रूप से। तरंग == 0 भाग। मुझे इसे कैसे पढ़ा जाना चाहिए? – webdad3

+2

कोई उपनिर्देशिका वाली निर्देशिका के लिए, 'Directory.GetDirectories (उपनिर्देशिका)' एक खाली 'स्ट्रिंग [] 'वापस कर देगी, जिसमें' 0' की 'लंबाई' होगी। इसलिए, हम केवल उन्हीं निर्देशिकाओं को चुनते हैं जो निर्देशिकाओं को पकड़ने के लिए उस मानदंड से मेल खाते हैं (संभवतः कोई भी फाइल नहीं है)। –

1

आप Directory.GetDirectories विधि का उपयोग कर सकते हैं।

हालांकि मुझे यकीन नहीं है कि मैं आपका प्रश्न सही ढंग से समझ गया हूं ... क्या आप स्पष्टीकरण दे सकते हैं?

16

DirectoryInfo

DirectoryInfo dInfo = new DirectoryInfo(<path to dir>); 
DirectoryInfo[] subdirs = dInfo.GetDirectories(); 
1

Havard के जवाब के आधार पर, लेकिन थोड़ा छोटा (और शायद थोड़ा क्योंकि यह का उपयोग करता है !Subdirs.Any()Subdirs.Length == 0 के बजाय पढ़ने में आसान):

static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path) 
{ 
    return Directory.GetDirectories(path, "*", SearchOption.AllDirectories) 
      .Where(subdir => !Directory.GetDirectories(subdir).Any()); 
} 

यह भी ध्यान रखें कि इस using System.Linq; करने की आवश्यकता है काम, क्योंकि यह LINQ क्वेरी भाषा का उपयोग करता है। (और using System.IO;Directory वर्ग के लिए :) :)

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