2013-07-24 13 views
10

To nie wydaje się mieć sens, więc jestem oczywiście robi coś źle:Dlaczego folder nie istnieje po utworzeniu?

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

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

    var doesItExists = folder.Exists; 
} 

Tworzy folder, jeśli nie istnieje. Z wyjątkiem doesItExists jest zawsze fałszywe. Dlaczego miałoby to być fałszem, gdybym tylko go stworzył?

+2

Co to jest folder? Klasa katalogu nie ma metody create, a plik File.Create wymaga parametru nazwy pliku – Sayse

+0

Prawdopodobnie jest to instancja 'System.IO.DirectoryInfo' – Khan

+0

Edytowana w celu zwiększenia czytelności. – sircodesalot

Odpowiedz

15

Wartość w folder.Exists to cached. Proponuję robić ten test:

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

Albo można nazwać folder.Refresh() zaktualizować cache przed sprawdzeniem, czy po jego utworzeniu katalog istnieje. Zobacz ten previous answer.

+10

To wydaje się głupim tematem do buforowania. – sircodesalot

+4

Zwłaszcza, jeśli nie odświeża go po wywołaniu metody "Create". – Khan

12

Przyjmując, że folder jest DirectoryInfo lub FileSystemInfo, odczytuje ona swoje wartości tylko raz, a następnie zwraca wartości buforowane. Nie zauważyłeś, że utworzyłeś katalog. Zadzwoń pod numer Refresh().

Można również użyć Directory.Exists().

+0

Czy jest jakiś powód, dla którego chcesz coś takiego zbuforowanego? – sircodesalot

+0

@sircodesalot wydajność, a może projektanci byli zbyt leniwi, aby wdrożyć model zdarzenia dla tego. – Renan

+0

@sircodesalot wierzyć lub nie, jest buforowany i to jest dokładnie problem. – Icarus

3

to będzie Ci to prawda, trzeba zadzwonić Refresh():

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

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

       var doesItExists = folder.Exists; 
      } 
Powiązane problemy