2010-04-30 16 views
6

किसी भी तरह से मेरी एक निर्देशिका में एक फ़ाइल दिखाई दी है, और इसके विस्तार के अंत में स्थान है - इसका नाम "test.txt" है। अजीब चीज यह है कि Directory.GetFiles() मुझे इस फ़ाइल का पथ देता है, लेकिन मैं FileInfo कक्षा के साथ फ़ाइल जानकारी पुनर्प्राप्त करने में असमर्थ हूं।फ़ाइल एक्सटेंशन के बाद रिक्त स्थान -> अजीब FileInfo व्यवहार

त्रुटि यहाँ प्रकट होता है:

DirectoryInfo di = new DirectoryInfo("c:\\somedir"); 
FileInfo fi = di.GetFileSystemInfos("test*")[0] as FileInfo; 
//correctly fi.FullName is "c:\somedir\test.txt " 
//but fi.Exists==false (!) 

FileInfo वर्ग टूटी हुई है? क्या मैं किसी भी तरह से इस फाइल के बारे में जानकारी प्राप्त कर सकता हूं? मैं वास्तव में नहीं जानता कि यह फ़ाइल मेरे फाइल सिस्टम पर कैसे दिखाई देती है, और मैं उनमें से कुछ को फिर से बनाने में असमर्थ हूं।

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

+0

क्या आप यह सुनिश्चित करने के लिए एक ओएस डिस्क चेकर चलाते हैं कि यह दूषित फ़ाइल नहीं है? क्या हम यह मानने के लिए सही होंगे कि यह विंडोज के तहत है? यदि ऐसा संस्करण है? – ChrisBD

+0

विंडोज विस्टा बिजनेस x86, लेकिन मुझे यकीन है कि मैंने एक साल पहले फ़ाइल को खुद बनाया है, – Axarydax

उत्तर

5

किसी स्थान के साथ फ़ाइल नाम समाप्त करना एक बुरा विचार के रूप में दस्तावेज किया गया है।

MSDN "Naming Files, Paths, and Namespaces (Windows)" से

:

  • एक फ़ाइल या एक रिक्ति या एक अवधि के साथ डायरेक्ट्री का अंत नहीं है। हालांकि अंतर्निहित फ़ाइल सिस्टम ऐसे नामों का समर्थन कर सकता है, विंडोज शैल और यूजर इंटरफेस नहीं है।

इसके अलावा, KB लेख "INFO: Filenames Ending with Space or Period Not Supported":

समस्याएं पैदा कर सकते हैं जब एक लबादा ग्राहक एक Windows NT सर्वर पर एक फ़ाइल बनाता है। पिछली जगहों और अवधियों को हटाने के लिए कोड नहीं किया जाता है और मैकिंतोश उपयोगकर्ता को सही ढंग से विराम चिह्नित फ़ाइल नाम मिलता है। Win32 API FindFirstFile() और FindNextFile() एक फ़ाइल नाम लौटाता है जो किसी स्थान या अवधि में समाप्त होता है; हालांकि, Win32 API का उपयोग कर फ़ाइल बनाने या खोलने का कोई तरीका नहीं है।

DirectoryInfo शायद FindFirstFile() और मित्रों को निर्देशिका सूची बनाने के लिए उपयोग करता है। File.Exists सबसे अधिक संभावना GetFileAttributes() के माध्यम से लागू की गई है जो शायद CreateFile() जैसी ही समस्या से पीड़ित है और एक nonexistent फ़ाइल की रिपोर्ट करेगा।

इसलिए, .NET विशेष रूप से, लेकिन विंडोज़ में कोई समस्या नहीं है।

4

हाँ मुझे इन फ़ाइलों के बारे में पता है। मुझे एक बार ऐसी जानवर की चीज़ भी मिली। यह से छुटकारा पाने के मैं सी # में एक प्रोग्रामिंग तरीके के बारे में पता नहीं है, लेकिन अच्छे पुराने आदेश पंक्ति अपने दोस्त है:

ओपन दिए गए फ़ोल्डर में एक कंसोल विंडो (या निष्पादित cmd और साथ फ़ोल्डर में नेविगेट cd कमांड)। इस निर्देशिका में फ़ाइलों का संक्षिप्त नाम पुनर्प्राप्त करने के लिए अब dir /x दर्ज करें। del या ren कमांड का उपयोग करके फ़ाइल को हटाने या नाम बदलने के लिए इस नाम का उपयोग करें।

+0

दिनांक के अनुसार, ओलिवर धन्यवाद। उस डीआईआर/एक्स ने चाल की थी। मुझे एक ही समस्या थी और पूर्ण नाम + एक्सटेंशन का उपयोग करके फ़ाइल को हटाने का प्रयास किया लेकिन बताया गया कि फ़ाइल नहीं मिली। हालांकि मैं अंततः संक्षिप्त नाम का उपयोग करके इसे हटाने में सक्षम था। –

+0

आप Win32 एपीआई को बाईपास करके इन फ़ाइलों को हेरफेर करने में सक्षम होंगे, यानी पॉज़िक्स सबसिस्टम ('सिग्विन' कमांड जैसे 'एमवी' और' टच 'के माध्यम से खुशी से इन फाइलनामों में हेरफेर करेंगे) या संभवतः एल के साथ पथ तैयार करके \ "\ \? \ "(यह Win32 एपीआई idiosyncrasies को बाईपास करने की भी संभावना होगी।) – vladr