我刚刚注意到删除和重写文件时出现了一种奇怪的行为:如果两个操作之间的间隔足够短,则文件创建时间不会更新。
我运行了以下代码:
File.Delete("hello");
using(var stream = new StreamWriter("hello"))
{
stream.WriteLine("hello");
}
var f = new FileInfo("hello");
Console.WriteLine("{0} {1}ms", f.CreationTime, f.CreationTime.Millisecond);
如果我在using(...)
行放置断点,我可以看到删除后文件消失,但最后它仍然会给我旧的创建日期。我甚至可以从资源管理器中手动删除该文件,然后运行此代码,它仍然显示旧的创建时间。
但是,如果我在删除和重新创建之间等待一段不确定的时间(大约1分钟),则创建时间设置正确(如果我在上述断点处等待调试器,则会起作用)。
这是从哪里来的?它是一个记录的Windows行为吗?我忘记了什么吗?
PS:我正在Windows XP上测试它,因为它很重要。
答案 0 :(得分:4)
这是Windows中一个称为文件隧道的已知问题/功能。
价: http://support.microsoft.com/kb/172190
相关:
https://serverfault.com/questions/92757/incorrect-file-creation-date-in-windows-xp-vista
Why Windows sets new created file's "created time" property to old time?
Windows filesystem: Creation time of a file doesn't change when while is deleted and created again
答案 1 :(得分:0)
尝试强制刷新FileInfo(因为数据已缓存):
var f = new FileInfo("hello");
f.Refresh(); // Force to read all props again
Console.WriteLine("{0} {1}ms", f.CreationTime, f.CreationTime.Millisecond);