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



我假设。net DirectoryInfo和FileInfo对象类似于Java的Java .io。文件,即它们表示抽象路径,不一定与现有的物理路径相连。

我可以用不同的方式做我想做的事情(清空文件夹并创建它,如果它不存在),但我想了解为什么不这样做:

using System.IO;
namespace TestWipeFolder
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var di = new DirectoryInfo(@"C:foobarbaz");
            if (di.Exists)
            {
                di.Delete(true);
            }
            // This doesn't work.  C:foobar is still there but it doesn't remake baz.
            di.Create();
        }
    }
}

UPDATE:我在重启后尝试了相同的代码,它工作得很好。我仍然想知道它与Java File对象有什么相似之处,以及删除一个目录(DirectoryInfo对象引用)是否会把事情搞砸,但现在这是次要的。

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

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

LinqPad Testcode:

var di = new DirectoryInfo(@"C:foobarbaz");
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.File和System.IO.Directory。使用这些类,您将获得文件和目录的当前状态。

最新更新