FileInfo.Delete更新不应该存在吗?

时间:2019-11-07 05:24:11

标签: c# .net-core

所以我刚刚注意到:

// this file exists
var fi = new FileInfo(@"S:\Ome\File.path");
// here fi.Exists == true
fi.Delete();
// still fi.Exists == true
fi.Refresh();
// finally fi.Exists == false

我编写的代码假设Delete()更改了Exists,并且失败非常意外。检查了实际的source code,发现Delete()的实现方式为:

public override void Delete() => FileSystem.DeleteFile(FullPath);

代替:

public override void Delete()
{
    FileSystem.DeleteFile(FullPath);
    Invalidate();
}

如果此简单操作成功,为什么不更新Exists?另一方面,MoveTofi对象更改为完全更新为新路径。因此,如果您进行Delete(),则需要在Refresh()良好的情况下继续使用MoveTo()(即使Move()返回一个新值会更好) FileInfo以及新的详细信息)。

设计上是否存在这种不一致之处,并且有原因吗?最后,这无关紧要,因为您只需要在Refresh()之后添加Delete(),但是我觉得这很不直观。

1 个答案:

答案 0 :(得分:1)

有一个简单的答案: Microsoft删除后忘记设置属性。简单。

删除就像这样。删除并返回!

if (Win32Native.DeleteFile(this.FullPath))
    return;

他们忘记通知主要对象删除。

if (Win32Native.DeleteFile(this.FullPath))
{
    this._dataInitialised = -1;
    return;
}