2013-07-24 13 views
10

これが意味をなすようには見えませんので、私は明らかに間違って何かをやっている:それは存在しない場合はフォルダを作成した後にフォルダが存在しないのはなぜですか?

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

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

    var doesItExists = folder.Exists; 
} 

は、フォルダを作成します。 doesItExistsは常に偽です。なぜ私はそれを作成した場合、それは間違いでしょうか?

+2

フォルダとは何ですか?ディレクトリクラスにはcreateメソッドがなく、File.Createにはファイル名パラメータが必要です – 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

特に、 'Create'メソッドが呼び出された後にリフレッシュしない場合。 – Khan

12

folderDirectoryInfoまたはFileSystemInfoであると仮定すると、その値を1回読み取り、キャッシュされた値を返します。ディレクトリを作成したことに気付かない。 Refresh()に電話してください。

Directory.Exists()を使用してください。

+0

キャッシュされたようなものが必要な理由はありますか? – sircodesalot

+0

@sircodesalotのパフォーマンス、またはデザイナーがあまりにも怠惰でイベントモデルを実装できなかった可能性があります。 – Renan

+0

@sircodesalotそれを信じているかどうかは、キャッシュされており、これはまさに問題です。 – Icarus

3

これはあなたが本当でしょう、あなたは(リフレッシュを呼び出す必要があり):

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

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

       var doesItExists = folder.Exists; 
      } 
関連する問題