我假设。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。使用这些类,您将获得文件和目录的当前状态。