C# 为什么赢了';删除目录信息实例后是否重新创建文件夹?
我假设.NET DirectoryInfo和FileInfo对象类似于Java的Java.io.File,即它们表示抽象路径,不一定连接到现有的物理路径 我可以用一种不同的方式做我想做的事情(清空一个文件夹,如果它不存在的话创建它),但我想了解为什么这样做不起作用: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
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之间时,它才起作用。