2012-12-11 16 views
5

मैं सोच रहा था क्या एक निर्देशिका वर्ण जो आप के बारे में सुनिश्चित नहीं हैं कि स्कैन करने के लिए एक अच्छा तरीका हो सकता है के साथ वाइल्डकार्ड के साथ एक निर्देशिका स्कैन करने के लिए।कैसे एक विशिष्ट उपनिर्देशिका

उदाहरण के लिए, मैं स्कैन करने के लिए

सी हैं:। \ Program \ Version2 * \ फ़ाइलें

मतलब

  • फ़ोल्डर C:\Program
  • Version2.* में स्थित है Version2.33, Version2.1, आदि जैसे कुछ भी हो सकता है
  • फ़ोल्डर यह

मैं जानता हूँ कि मैं foreach (directory) if contains("Version2.") की तरह कुछ कर सकता है, लेकिन अगर कोई ऐसा करने का एक बेहतर तरीका था मैं सोच रहा था में Files नाम का एक फ़ोल्डर है।

+0

आप [Directory.GetFiles समारोह] की कोशिश की है की कोशिश करो (http://msdn.microsoft.com/en-us/library/wz42302f.aspx)? मुझे यकीन है कि अगर कई निर्देशिकाओं को शामिल किया जाएगा नहीं कर रहा हूँ, लेकिन यह वाइल्डकार्ड – Default

+0

संभावित डुप्लिकेट के रूप में '*' है: http://stackoverflow.com/questions/7286477/possible-to-specify-directory-path-with-a- वाइल्डकार्ड – Default

+0

@ डीफॉल्ट, वह जवाब उपयोगी है, जब पथ के अंत में वाइल्डकार्ड, मध्य में नहीं, जैसा कि इस प्रश्न में लगता है। –

उत्तर

6

Directory.EnumerateDirectories खोज पैटर्न स्वीकार करता है। तो माता-पिता वाइल्डकार्ड है कि गणना और तुलना बाकी की गणना:

var directories = 
    Directory.EnumerateDirectories(@"C:\Program\", "Version2.*") 
    .SelectMany(parent => Directory.EnumerateDirectories(parent,"Files")) 

नोट: पथ किसी भी स्तर पर वाइल्डकार्ड शामिल कर सकते हैं अगर - बस पथ सामान्य और "\" से अलग हो गए, से स्तर से फ़ोल्डरों स्तर इकट्ठा।

+0

वहाँ GetDirectories बजाय EnumerateDirectories उपयोग करने के लिए एक कारण है? – Default

+2

@Default EnumerateDirectories आलसी मूल्यांकन का उपयोग करता है, तो (जाँच MSDN [कड़ी] (http://msdn.microsoft.com/en-us/library/dd383572 (v = बनाम की टिप्पणी अनुभाग फ़ाइलें/फ़ोल्डर की बड़ी संख्या के लिए तेजी से हो सकता है .100) .aspx)) –

+0

यह सबसे अच्छा फिट करने के लिए क्या मैं वर्तमान में देख रहा हूँ लगता है (: मैं दे देंगे यह एक जल्द ही कोशिश धन्यवाद –

1

इस

var pattern = new Regex(@"C:\\Program\\Version 2(.*)\\Files(.*)"); 

var directories = Directory.EnumerateDirectories(@"C:\Program", "*", 
               SearchOption.AllDirectories) 
               .Where(d => pattern.IsMatch(d)); 
+0

+1 कार्य मई, लेकिन जिस तरह से अधिक directoies खोजने के लिए संभावना - अतिरिक्त आवश्यकता होगी।!। बाद में फ़िल्टरिंग। –

+0

आप सही हैं, मेरे उत्तर में फ़िल्टरिंग जोड़ा गया –

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