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 回答