2012-01-08 13 views
11

क्या एकाधिक फ़ाइल प्रकारों की खोज करने के लिए Windows API फ़ंक्शन FindFirstFile का उपयोग करना संभव है, उदाहरण के लिए *.txt और *.doc एक ही समय में?FindFirstFile एकाधिक फ़ाइल प्रकार

मैंने '\0' के साथ पैटर्न को अलग करने की कोशिश की लेकिन यह काम नहीं करता है - यह केवल पहला पैटर्न खोजता है (मुझे लगता है, ऐसा इसलिए है क्योंकि ऐसा लगता है कि '\0' स्ट्रिंग का अंत है)। केवल वहाँ कोई अन्य समाधान अगर मैं इसे का उपयोग करेगा -

बेशक

, मैं *.* पैटर्न के साथ FindFirstFile कॉल कर सकते हैं और फिर मेरी पैटर्न की जाँच करें या इसे हर पैटर्न के लिए कहते हैं, लेकिन मैं इस विचार पसंद नहीं है।

+0

नाम का एक प्रविष्टि बनाता है, मेरे ज्ञान के सर्वोत्तम में, आप एकाधिक वाइल्डकार्ड निर्दिष्ट नहीं कर सकते हैं। आपको '*' का उपयोग करना होगा और स्वयं को फ़िल्टर करना होगा। –

उत्तर

15

यह समर्थित नहीं है। इसे विभिन्न वाइल्डकार्ड के साथ दो बार चलाएं। या *.* का उपयोग करें और परिणाम फ़िल्टर करें। यह निश्चित रूप से बेहतर विकल्प है, विरासत एमएस-डॉस 8.3 फ़ाइल नामों के समर्थन के कारण वाइल्डकार्ड किसी भी तरह अस्पष्ट हैं। * .doc जैसे वाइल्डकार्ड उदाहरण के लिए .doc और .docx फ़ाइलों दोनों पाएंगे। longfilename.docx जैसे एक फ़ाइल नाम भी LONGFI~1.DOC

5

MSDN docsFindFirstFile के बारे में कुछ भी नहीं पता है, जो कई खोज पैटर्न की अनुमति देता है, इसलिए यह अस्तित्व में नहीं है।

इस मामले में अपने सबसे अच्छे शर्त एक खुली चयन (जैसे C:\\some directory\* या *) का उपयोग कर स्कैन करने के लिए और फिर WIN32_FIND_DATA के cFileName सदस्य के आधार पर फ़िल्टर, strrchr (या उचित Unicode संस्करण) का उपयोग कर विस्तार मिल रहा है। इसे फ़ाइल एक्सटेंशन बनाने वाले वर्णों के छोटे सेट के लिए बहुत तेजी से चलना चाहिए।

यदि आप जानते हैं कि सभी एक्सटेंशन 3 वर्ण कह रहे हैं, तो आप चीजों को गति देने के लिए *.??? के रूप में इसे मुखौटा करने में सक्षम होना चाहिए।

+0

प्रदर्शन समस्या यह नहीं है कि फ़ाइल नाम फ़िल्टर करने में कितना समय लगता है, क्योंकि इसे कहीं भी किया जाना है। यह तथ्य है कि आप बार-बार एक एपीआई फ़ंक्शन मार रहे हैं। हालांकि, FindNextFile मेरे अनुभव में काफी प्रदर्शन करने वाला है इसलिए मुझे संदेह है कि यह एक समस्या है। –

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