2013-07-24 8 views
10

Questo non sembra avere senso, quindi sono ovviamente facendo qualcosa di sbagliato:Perché non esiste una cartella dopo averla creata?

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

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

    var doesItExists = folder.Exists; 
} 

Crea una cartella se non esiste. Tranne doesItExists è sempre falso. Perché sarebbe falso se lo avessi appena creato?

+2

Qual è la cartella? La classe di directory non ha un metodo di creazione e File.Create richiede un parametro filename – Sayse

+0

È probabilmente un'istanza di "System.IO.DirectoryInfo' – Khan

+0

Modificata per chiarezza. – sircodesalot

risposta

15

Il valore in folder.Exists è cached. Vorrei suggerire di fare questo controllo:

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

o si potrebbe chiamare folder.Refresh() per aggiornare la cache prima di verificare se la directory esiste dopo averlo creato. Vedi questo previous answer.

+10

Sembra una cosa stupida da memorizzare nella cache. – sircodesalot

+4

Specialmente se non lo aggiorna dopo che è stato chiamato il metodo 'Create'. – Khan

12

Supponendo che folder sia un DirectoryInfo o FileSystemInfo, esso legge i suoi valori una volta e quindi restituisce valori memorizzati nella cache. Non si nota che hai creato la directory. Chiama Refresh().

In alternativa utilizzare Directory.Exists().

+0

C'è un motivo per cui vorresti qualcosa come questo nella cache? – sircodesalot

+0

prestazioni @sircodesalot, o forse i progettisti erano troppo pigri per implementare un modello di eventi per questo. – Renan

+0

@sircodesalot ci creda o no, è memorizzato nella cache e questo è esattamente il problema. – Icarus

3

questo ti porterà vero, è necessario chiamare refresh():

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

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

       var doesItExists = folder.Exists; 
      } 
Problemi correlati