我假设.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对象引用的文件夹是否会搞砸了,但现在这种情况已经过时了。
答案 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.File和System.IO.Directory。使用这些类,您将获得文件和目录的当前状态。