C# 为什么赢了';删除目录信息实例后是否重新创建文件夹?

C# 为什么赢了';删除目录信息实例后是否重新创建文件夹?,c#,system.io.fileinfo,C#,System.io.fileinfo,我假设.NET DirectoryInfo和FileInfo对象类似于Java的Java.io.File,即它们表示抽象路径,不一定连接到现有的物理路径 我可以用一种不同的方式做我想做的事情(清空一个文件夹,如果它不存在的话创建它),但我想了解为什么这样做不起作用: using System.IO; namespace TestWipeFolder { internal class Program { private static void Main(strin

我假设.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文件对象有什么相似之处,以及删除DirectoryInfo对象引用的文件夹是否会把事情搞砸,但现在这是次要的。DirectoryInfo类在创建DirectoryInfo实例时为您提供目录的信息

如果对目录进行了类似delete的更改,则信息不会反映到当前实例中。您需要在实例上调用
.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类类似的类是和。使用这些类,您将获得文件和目录的当前状态。

您可以定义“不工作”吗?

我已经有一段时间没有使用
DirectoryInfo
(我通常使用静态
目录
文件
类,如果不工作,它们可能对您有用)。它是抛出异常,还是什么都不做?我要用古老的口号——“它在我的机器上工作!”我运行了你的代码,它创建了文件夹并删除了。我甚至试着把文件放进文件夹,它仍然没有任何错误,我还检查了文件夹是否确实被删除,然后重新创建。我想这可能是因为文件夹中的文件被另一个文件锁定的问题process@Mick谢谢我将在明天重新启动后再次尝试此操作,可能只是出现了一个小故障或您建议的文件处于打开状态。我很困惑,因为使用Directory.Create(pathName)和Directory.Delete(pathName,true)代替FileInfo在FileInfo不起作用的地方起作用了。知道它对人有用是很好的,所以这可能不是我没有得到的FielFieldObjcts的一些微妙之处。为了更详细地弄清楚是否“它们代表抽象路径,并且不一定连接到现有的物理路径”,考虑查看参考源。是的,这将是特定于某些Microsoft实施的,但大多数情况下,这是大多数人关心的。谢谢。我的问题原来只是一个侥幸,但您的回答提高了我对类型的理解,这正是我所寻找的。在我看来,这是.NET中的一个bug,directoryInfo.Delete()后跟directoryInfo.Create()不起作用。仅当directoryInfo.Refresh()介于Delete和Create之间时,它才起作用。