2013-02-19 5 views
5

में विभिन्न प्रकार की फ़ाइलों को कैसे प्राप्त करें I C2 में DirectoryInfo.GetFiles फ़ंक्शन का उपयोग करके * .gif और * .jpg दोनों फ़ाइल प्रकार कैसे प्राप्त कर सकते हैं?DirectoryInfo.GetFiles, C#

मुझे इस कोड की कोशिश: "। रास्ते में अवैध अक्षर"

string pattern = "*.gif|*.jpg"; 
FileInfo[] files = dir.GetFiles(pattern); 

अपवाद फेंक दिया गया है

+2

शायद यह आप मदद कर रहा है, इस पर एक नजर है। http://stackoverflow.com/questions/163162/can-you-call-directory-getfiles-with-multiple-filters – Belial09

+1

इस लिंक को आजमाएं: http://www.beansoftware.com/ASP.NET- अक्सर पूछे जाने वाले प्रश्न/एकाधिक-फ़िल्टर-निर्देशिका। गेटफाइल-विधि.aspx – Pandian

उत्तर

2

आप ऐसा नहीं कर सकते हैं। आपको उनमें से प्रत्येक को GetFiles() विधि का उपयोग करने की आवश्यकता है। या आप अपने एक्सटेंशन के लिए एक सरणी का उपयोग कर सकते हैं और फिर उनमें से प्रत्येक को जांच सकते हैं लेकिन यह अभी भी आपको एक से अधिक बार इस विधि की आवश्यकता है।

इन प्रश्नों को देखें;

1

आप क्वेरी में एकाधिक पैटर्न निर्दिष्ट नहीं कर सकते हैं, आपको एक्सटेंशन की एक सूची रखने की आवश्यकता होगी और प्रत्येक के लिए GetFiles पर कॉल करें। उदाहरण के लिए ...

var exts = new string[] { "*.gif", "*.jpg" }; 
foreach (var ext in exts) { 
    var files = dir.GetFiles(ext); 
} 

आप *.* की पूरी वाइल्डकार्ड इस्तेमाल कर सकते हैं सभी फ़ाइलें एक साथ पाने के लिए और उन्हें मैन्युअल रूप से फिल्टर, लेकिन इस के प्रदर्शन निर्देशिका और उसकी सामग्री पर निर्भर करता है एक मुद्दा हो सकता है।

6

एक स्ट्रिंग स्वरूप में गठबंधन करने के लिए कोई तरीका नहीं है, आप एक सूची में पैटर्न स्टोर करने के लिए है:

var extensions = new[] { "*.gif", "*.jpg" }; 
var files = extensions.SelectMany(ext => dir.GetFiles(ext)); 
+0

अच्छा और सरल। मेरा पसंदीदा विकल्प – Tillito

0

आप के रूप में जोड़ सकते हैं जैसा कि आप निम्नलिखित कोड के खंड में चाहते हैं, उतने विस्तार।

DirectoryInfo directoryInfo = new DirectoryInfo(filePath); 
FileInfo[] files = directoryInfo.GetFiles().Where(f => f.Extension == ".gif" || f.Extension == ".jpg").ToArray();