3

我刚刚注意到删除和重写文件的一个奇怪行为:如果两个操作之间的间隔足够短,则文件创建时间不会得到更新。

我运行了以下代码:

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 上测试它,这很重要。

4

2 回答 2

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);
于 2012-06-11T13:26:26.753 回答