2013-07-24 35 views
10

Bu mantıklı görünmüyor, demek ki yanlış bir şey yapıyorum: Bu yoksaNeden oluşturduktan sonra bir klasör olmaz?

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

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

    var doesItExists = folder.Exists; 
} 

bir klasör oluşturur. doesItExists hariç her zaman yanlıştır. Yeni yaratmış olsam neden yanlış olur?

+2

mı? Dizin sınıfı bir oluşturma yöntemine sahip değildir ve File.Create bir dosya adı parametresine ihtiyaç duyar. – Sayse

+0

Bu muhtemelen bir 'System.IO.DirectoryInfo' – Khan

+0

Açıklık için düzenlenmiştir. – sircodesalot

cevap

15

folder.Exists'daki değer cached'dur.

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

Yoksa dizin oluşturduktan sonra varsa kontrol etmeden önce önbelleği güncellemek için folder.Refresh() diyebiliriz: Bu çeki yapıyor öneririz. Bkz. previous answer.

+10

Bu önbellek aptalca bir şey gibi görünüyor. – sircodesalot

+4

Özellikle 'Create' yöntemi çağrıldıktan sonra yenilemezse. – Khan

12

folder'un DirectoryInfo veya FileSystemInfo olduğunu varsayarsak, değerlerini bir kez okur ve sonra önbelleğe alınan değerleri döndürür. Dizini oluşturduğunuzu farketmez. Refresh()'u arayın.

Alternatif olarak Directory.Exists()'u kullanın.

+0

Bu önbelleğe alınmış gibi bir şey isteyebileceğiniz bir neden var mı? – sircodesalot

+0

@sircodesalot performansı, ya da belki tasarımcılar bunun için bir olay modeli uygulamak için çok tembeldi. – Renan

+0

@sircodesalot inanın ya da inanmayın, önbelleğe alınmış ve bu tam olarak sorun. – Icarus

3

bu true alacak, siz) (refresh çağırmanız gerekir: Klasör Ne

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

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

       var doesItExists = folder.Exists; 
      } 
İlgili konular