为什么DirectoryInfo实例(重新)删除后不会创建文件夹?

Dan*_*vak 5 c# system.io.fileinfo

我假设.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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:我重启后尝试了相同的代码,它工作正常.我仍然想知道Java File对象有什么相似之处,以及删除DirectoryInfo对象引用的文件夹是否可以搞砸了,但现在却处于后台.

Jeh*_*hof 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
Run Code Online (Sandbox Code Playgroud)

与 java 类似的类是System.IO.FileSystem.IO.Directory。使用此类,您将获得文件和目录的当前状态。