2013-07-24 4 views
10

यह समझ बनाने के लिए प्रतीत नहीं होता है, तो मैं स्पष्ट रूप से कुछ गलत कर रहा हूँ:इसे बनाने के बाद फ़ोल्डर क्यों मौजूद नहीं होगा?

DirectoryInfo folder = new DirectoryInfo(Environment.CurrentDirectory + @"\Test"); 

if (folder.Exists == false) { 
    folder.Create(); 

    var doesItExists = folder.Exists; 
} 

एक फ़ोल्डर बनाता है अगर यह मौजूद नहीं है। doesItExists को छोड़कर हमेशा झूठा है। अगर मैं इसे अभी बनाया तो यह झूठा क्यों होगा?

+2

फ़ोल्डर क्या है? निर्देशिका वर्ग में कोई बनाने विधि नहीं है और फ़ाइल। क्रेट को फ़ाइल नाम पैरामीटर – Sayse

+0

की आवश्यकता है यह शायद 'System.IO.DirectoryInfo' – Khan

+0

स्पष्टता के लिए संपादित किया गया है। – sircodesalot

उत्तर

15

folder.Exists में मान cached है। मैं इस चेक कर रही सुझाव है:

var doesItExists = Directory.Exists(folder.FullName); 

या आप कह सकते हैं folder.Refresh() जाँच निर्देशिका इसे बनाने के बाद से मौजूद है, तो इससे पहले कि कैश अद्यतन करने के लिए। यह previous answer देखें।

+10

यह कैश करने के लिए एक मूर्ख चीज की तरह लगता है। – sircodesalot

+4

विशेष रूप से यदि यह 'बनाएं' विधि के बाद इसे रीफ्रेश नहीं करता है। – Khan

12

मानते हैं कि folderDirectoryInfo या FileSystemInfo है, यह एक बार अपने मान पढ़ता है, और फिर कैश किए गए मान देता है। यह ध्यान नहीं देता कि आपने निर्देशिका बनाई है। Refresh() पर कॉल करें।

वैकल्पिक रूप से Directory.Exists() का उपयोग करें।

+0

क्या कोई कारण है कि आप इस कैश की तरह कुछ चाहते हैं? – sircodesalot

+0

@ सिर्कोड्सलॉट प्रदर्शन, या शायद डिजाइनर उस के लिए एक इवेंट मॉडल को लागू करने के लिए बहुत आलसी थे। – Renan

+0

@ सिर्कोड्सलॉट विश्वास करते हैं या नहीं, यह कैश किया गया है और यह वास्तव में समस्या है। – Icarus

3

यह आप सही हो जाएगा, तो आप ताज़ा (कॉल करने के लिए) की जरूरत है:

  DirectoryInfo folder = new DirectoryInfo(Environment.CurrentDirectory + @"\Test"); 

      if (folder.Exists == false) 
      { 
       folder.Create(); 
       folder.Refresh(); 

       var doesItExists = folder.Exists; 
      } 
संबंधित मुद्दे