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

时间:2014-08-14 00:33:11

标签: 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();
        }
    }
}

更新:重启后我尝试了相同的代码并且运行正常。我仍然想知道Java File对象的相似之处以及删除DirectoryInfo对象引用的文件夹是否会搞砸了,但现在这种情况已经过时了。

1 个答案:

答案 0 :(得分:4)

DirectoryInfo类为您提供创建DirectoryInfo实例时目录的信息。

如果对目录(如删除)进行了更改,则该信息不会反映到当前实例中。您需要在实例上调用.Refresh()来更新DirectoryInfo实例的状态。

LinqPad Testcode:

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。使用这些类,您将获得文件和目录的当前状态。