2008-09-19 12 views
19

एक अच्छी नियमित अभिव्यक्ति क्या है जो यह सुनिश्चित करने के लिए एक टेक्स्ट स्ट्रिंग को मान्य कर सकती है कि यह एक वैध विंडोज फ़ाइल नाम है? (AKA के पास \/:*?"<>| वर्ण नहीं हैं)। क्यों, System.IO.FileInfo वर्ग का उपयोग कर DirectoryInfo वर्ग आप उपयोगी तरीकों का एक सेट है के साथ एक साथ नहींफ़ाइल नाम सत्यापन के लिए सी # में नियमित अभिव्यक्ति

// Return true if string is invalid. 
if (Regex.IsMatch(szFileName, "<your regex string>")) 
{ 
    // Tell user to reformat their filename. 
} 

उत्तर

48

जैसा कि पहले ही उत्तर दिया, GetInvalidFileNameChars यह तुम्हारे लिए क्या करना चाहिए, और तुम भी नियमित अभिव्यक्ति की भूमि के ऊपर की जरूरत नहीं है:

if (proposedFilename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) 
{ 
    MessageBox.Show("The filename is invalid"); 
    return; 
} 
+0

यदि सही कथन में सरल दाएं कोष्ठक प्लेसमेंट दुर्घटनाग्रस्त हो, लेकिन बहुत बढ़िया धन्यवाद! – Balk

+7

तो "सी ::::::::" एक वैध फ़ाइल नाम है? – Andrew

+0

एंड्रयू: नहीं, यह वर्णों के लिए सिर्फ एक मोटा मूलभूत जांच है .. 'प्रस्तावितफिल्नेनाम' के साथ फ़ाइल तक पहुंचने के कई अन्य कारण असफल हो सकते हैं: फ़ाइल (नहीं) मौजूद है, केवल पढ़ने के लिए, पथ बहुत लंबा है, निर्देशिका नहीं है अस्तित्व में नहीं है, नाम एक डॉस डिवाइस फाइल है (जैसे 'नूल' या 'पीआरएन') आदि –

0

:

मैं निम्नलिखित की तरह उपयोग करना चाहते हैं।

6

यह सिर्फ देखना हो फ़ाइल नाम किसी भी शामिल है के रूप में सरल नहीं है System.IO.Path.GetInvalidFileNameChars (जैसा कि पहले से ही कुछ अन्य उत्तरों में उल्लिखित है)।

उदाहरण के लिए यदि कोई ऐसे नाम में प्रवेश करता है जिसमें कोई अमान्य वर्ण नहीं है लेकिन 300 वर्ण लंबा है (यानी MAX_PATH से अधिक) - यह किसी भी .NET फ़ाइल API के साथ काम नहीं करेगा, और केवल सीमित समर्थन है \? \ पथ वाक्यविन्यास का उपयोग कर बाकी खिड़कियां। आपको संदर्भ की आवश्यकता है कि शेष पथ कितना समय निर्धारित करना है कि फाइल का नाम कितना समय हो सकता है। आप more information about this type of thing here पा सकते हैं।

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

0

पथ। गेटइनवालिडफाइलनाम चार्स - एक अच्छा तरीका नहीं है। इसे आज़माएं:

if(@"C:\A.txt".IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) 
{ 
    MessageBox.Show("The filename is invalid"); 
    return; 
} 
+0

यह इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं। मैं यहां एक Google क्वेरी से आया था और मैं केवल वैध फ़ाइल नामों (पूर्ण पथ नहीं) के लिए जांचना चाहता हूं और मुझे पूरा यकीन है कि आपके पास फ़ोल्डर के अंदर "c: \ a.txt" नामक फ़ाइल नहीं हो सकती है;) –

+0

हां, फ़ाइल का नाम केवल पथ का नाम देखने के लिए Path.GetInvalidFileNameChars() स्वीकार्य है, लेकिन नामकरण सम्मेलन (http://msdn.microsoft.com/en-us/library/aa365247.aspx#naming_conventions) में बहुत सारे रोचक नियम हैं। –

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