runtime: FileInfo.Delete() does not update .Exists
FileInfo.Delete() does not update .Exists
So I just noticed:
// 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
The code I wrote assumed Delete() changes .Exists and it was failing very unexpectedly. Checked the actual source code and found Delete() is implemented as:
public override void Delete() => FileSystem.DeleteFile(FullPath);
instead of:
public override void Delete()
{
FileSystem.DeleteFile(FullPath);
Invalidate();
}
Why is this simple operation not updating .Exists if it succeeds? On the other hand MoveTo() changes the fi object completely updating to the new path. So if you do a Delete() you need to followup with a Refresh() while a MoveTo() is good (even if it would have been better if Move() returned a new FileInfo with the new details instead of changing the current one).
Is this inconsistency by design or was it just overlooked?
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 15 (14 by maintainers)
I agree that updating the behavior consistently when users explicitly change state is the way to go. We need to document this breaking change, of course.
@JeremyKuhne you can assign me to this if it’s still available
Thank you yes @carlossanlop this it’s fixed I think