5

私は、.NET DirectoryInfo および FileInfo オブジェクトが Java の java.io.File に似ていると想定しています。つまり、これらは抽象パスを表し、必ずしも既存の物理パスに接続されているわけではありません。

私がやろうとしていること(フォルダーを空にして、存在しない場合は作成する)を別の方法で実行できますが、これが機能しない理由を理解したいです:

using System.IO;

namespace TestWipeFolder
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var di = new DirectoryInfo(@"C:\foo\bar\baz");

            if (di.Exists)
            {
                di.Delete(true);
            }

            // This doesn't work.  C:\foo\bar is still there but it doesn't remake baz.
            di.Create();
        }
    }
}

更新:再起動後に同じコードを試してみましたが、うまくいきました。Java File オブジェクトとの類似点と、DirectoryInfo オブジェクトが参照するフォルダーを削除すると問題が発生する可能性があるかどうかを知りたいのですが、それは後回しにしています。

4

1 に答える 1

4

このDirectoryInfoクラスは、DirectoryInfo インスタンスの作成時にディレクトリの情報を提供します。

削除などの変更がディレクトリに加えられた場合、その情報は現在のインスタンスに反映されません。.Refresh()DirectoryInfo インスタンスの状態を更新するには、インスタンスを呼び出す必要があります。

LinqPad テストコード:

var di = new DirectoryInfo(@"C:\foo\bar\baz");
di.Dump();

if (di.Exists){
  di.Exists.Dump();  // prints out true

  di.Delete(true);
  di.Exists.Dump();  // still prints out true

  di.Refresh();
  di.Exists.Dump();    // prints out false
}

di.Create();
di.Refresh();
di.Exists.Dump();    // prints out true

Java クラスに似たクラスはSystem.IO.FileSystem.IO.Directoryです。このクラスを使用すると、ファイルとディレクトリの現在の状態を取得できます。

于 2014-08-14T07:00:55.753 に答える