2010-11-16 10 views
12

ठीक है, मुझे कुछ ऐसा लगता है जो अजीब लगता है। मुझे एहसास हुआ कि पथनाम को सही ढंग से प्रारूपित करने की मेरी गलती नहीं थी, लेकिन मैं निम्नलिखित परीक्षण को झूठी वापसी की उम्मीद करता हूं, खासकर जब फ़ोल्डर मौजूद नहीं था।DirectoryExists ("c: temp \ foo") निर्देशिका मौजूद नहीं होने पर सत्य लौटाता है!

DirectoryExists("C:temp\\foo") 

लेकिन वास्तव में, यह सत्य साबित होता है भले ही निर्देशिका मौजूद न हो!

कोड

DirectoryExists("C:\\temp\\foo") 

किसी ने मुझे बता सकते हैं कि मैं क्यों पहले संस्करण से एक झूठी सकारात्मक मिल होना चाहिए? मैं उम्मीद करता हूं कि यह झूठी वापसी करे या शायद अपवाद फेंक दे, लेकिन सच नहीं लौटाएगा।

+1

मुझे लगता है कि मुझे यह निर्दिष्ट करना चाहिए कि यह सी # के तहत .NET है! –

+5

'DirectoryExists' क्या है? यह मानक .NET लाइब्रेरी फ़ंक्शन नहीं है। यह 'निर्देशिका। एक्सिस्टिस्ट्स (पथ)' हो सकता है, लेकिन कोई 'DirectoryExists' फ़ंक्शन नहीं है। –

+1

मैं इसे वापस करने के लिए कोई कारण नहीं देखता ** सत्य **। मैं इसके बारे में उत्सुक हूँ। वैसे, अगर आपको पता नहीं है, तो आप 'निर्देशिका' एक्सिसिस्ट्स (@ "सी: \ temp \ foo") भी लिख सकते हैं; 'बचने के दृश्यों से छुटकारा पाने के दौरान। –

उत्तर

21

यह एपीआई सही तरीके से व्यवहार कर रही है लेकिन पहली बार आपको इस व्यवहार का सामना करना गलत लगता है। वॉल्यूम पत्र के बाद विशेष अर्थशास्त्र के बाद \ को छोड़ना। यह उस वॉल्यूम के लिए SetCurrentDirectory पर अंतिम कॉल में पारित मान के साथ वॉल्यूम विनिर्देशक को प्रतिस्थापित करेगा। यह कैसे याद किया जाता है यहाँ

चर्चा की है इस मामले में पिछले मूल्य में पारित या तो c:\ या वर्तमान निर्देशिका बस सेट नहीं किया गया था था। इसलिए कॉल वास्तव में दूसरे संस्करण

Directory.Exists("c:\\temp\\foo") 

यह सही ढंग से सही

के लिए मूल्यांकन क्यों इस Directory.Exists के लिए होता है कि गहरी, गहरी समारोह में नीचे यह GetFullPathName जो इस व्यवहार पर निर्भर करता है का उपयोग करता है बन गया है (देखें जुड़ा हुआ प्रलेखन)।

+0

के हिस्से के रूप में 'Directory.Exists' लिखने का मतलब था, लेकिन निर्देशिका मौजूद नहीं थी! (जहां तक ​​मैं कह सकता हूं) भले ही यह मेरे लिए वॉल्यूम और पथनाम "निश्चित" हो, अभी भी झूठ वापस आ गया है, है ना? कारण यह क्यों आया क्योंकि कोड गलत तरीके से सोचा था कि वास्तव में यह निर्देशिका नहीं थी। क्या आप इन अर्थशास्त्रों को समझाएंगे? क्या मुझे यकीन नहीं है कि मुझे अभी तक यह मिल गया है। –

+0

अगर मैं इसे सैंडबॉक्स करता हूं, तो यह व्यवहार करता है कि मैं कैसे उम्मीद करूंगा। हालांकि, मेरे उत्पादन कोड में, मुझे सबसे अधिक गलत झूठा लगता है क्योंकि वर्तमान निर्देशिका एक ऐसी स्थिति में परिणाम देती है जहां प्रश्न में निर्देशिका किसी भी तरह मौजूद होती है। –

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