2012-12-31 7 views
19

मैंने विधियों के System.IO.Directory में एक अनियंत्रित व्यवहार पर ठोकर खाई।निर्देशिका। गेटफाइल को कोई भी फाइल नहीं मिली

जब भी searchPattern पैरामीटर विधि के लिए पारित एक सुरक्षित विंडोज डिवाइस का नाम शामिल है, इस तरह के "nul.*" या "aux.bmp" के रूप में, विधि एक सरणी एक nonexisting फ़ाइल के नाम वाले, C:\Users\ft1\nul या D:\aux की तरह देता है, आदि

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

string[] fileNames = Directory.GetFiles(@"C:\D:\..\..\...\", "con.txt"); 
foreach (string fileName in fileNames) Console.WriteLine(fileName); 

प्रिंट

C:\D:\..\..\...\con 

कोई सुराग?

उत्तर

28

यह ज्ञात है। यह एक ऑपरेटिंग सिस्टम के बारे में डिजाइन है Naming Files, Paths, and Namespaces (Windows)

अंश: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4:

फ़ाइल का नाम निम्नलिखित आरक्षित नाम का उपयोग न करें , COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, और LPT9। विस्तार से तुरंत इन नामों से बचें; उदाहरण के लिए, NUL.txt की अनुशंसा नहीं की जाती है। अधिक जानकारी के लिए, नामस्थान देखें।

ये मूल रूप से उपनाम (नामस्थान) फ़ाइल नाम हैं, इसलिए वे हमेशा वैश्विक रूप से मौजूद होते हैं (प्रत्येक फ़ोल्डर में)। यदि आप उन्हें गिनाने का प्रयास करते हैं, तो आप उन्हें वापस ले लेंगे क्योंकि वे मौजूद हैं।

+1

क्या आप जानते हैं यदि .नेट फ्रेमवर्क ऐसे आरक्षित नामों में से किसी में निर्मित सूची है? –

+6

यह एक अच्छा सवाल है, शायद यह एक बेहतर एसओ सवाल के रूप में पूछना बेहतर होगा, लेकिन सवाल के बाद [अगर जांच की गई स्ट्रिंग विंडोज के तहत कानूनी (अनुमति) फ़ाइल नाम है तो जांचें?] (Http://stackoverflow.com/प्रश्न/62771/कैसे-चेक-अगर-दिया-स्ट्रिंग-कानूनी-अनुमति-फ़ाइल-नाम-अंडर-विंडोज़) पहले से ही पूछा गया है, मैं आपको लिंक दूंगा। –

+0

आपको बहुत धन्यवाद एरिक! –

10

ये एमएसडीओएस/एनटीएफएस द्वारा reserved words हैं।

Wikipedia से:

इसके अलावा, विंडोज और डॉस उपयोगिताओं में, कुछ शब्दों को भी सुरक्षित किया जा सकता है और फ़ाइल नाम के रूप में इस्तेमाल नहीं किया जा सकता। उदाहरण के लिए, डॉस डिवाइस फाइलें:

CON, PRN, AUX, CLOCK$, NUL 
COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 
LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. 

सिस्टम इन प्रतिबंधों है कि कुछ अन्य फ़ाइल सिस्टम के साथ असंगतियां पैदा कर। उदाहरण के लिए, Windows इन कानूनी यूनिक्स फ़ाइल नामों के लिए हैंडल करने या त्रुटि रिपोर्ट बढ़ाने में विफल रहेगा: aux.c, q "uote" s.txt, या NUL.txt।

NTFS फ़ाइल नाम है कि आंतरिक रूप से उपयोग किया जाता है शामिल हैं:

$Mft, $MftMirr, $LogFile, $Volume, $AttrDef, $Bitmap, $Boot, $BadClus, $Secure, 
$Upcase, $Extend, $Quota, $ObjId and $Reparse 
+0

धन्यवाद, मैं आरक्षित एमएसडीओएस नामों के बारे में जानता था लेकिन उन आंतरिक एनटीएफएस फाइलनाम मेरे लिए नए हैं। मुझे उन्हें एक नजर डालना होगा क्योंकि मुझे लगता है कि वे मेरे आवेदन में समस्याएं भी पैदा कर सकते हैं। –

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