【问题标题】:Ghost file remains alive when deleted and recreatedGhost 文件在删除和重新创建时仍然存在
【发布时间】:2012-06-11 13:24:00
【问题描述】:

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

我运行了以下代码:

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

【问题讨论】:

  • 考虑创建您的 FileInfo 实例,然后从中创建流,或者在创建 FileInfo 实例之前关闭流。如果您直接查看文件系统(使用 shell 中的 DIR 或使用 Windows 资源管理器,您可能会找到预期的创建时间)。
  • @OllieJones } 在 using 块的末尾关闭流。而且我没提,但是在资源管理器属性窗口中也能看到这个创建时间问题。

标签: c# file delete-file


【解决方案1】:
【解决方案2】:

尝试强制刷新您的 FileInfo(因为数据已缓存):

var f = new FileInfo("hello");
f.Refresh(); // Force to read all props again
Console.WriteLine("{0} {1}ms", f.CreationTime, f.CreationTime.Millisecond);

【讨论】:

  • 相同的行为。我想这会很有用,因为我在创建流之前得到了FileInfo,但在这里它什么也没做。
猜你喜欢
  • 1970-01-01
  • 2011-12-17
  • 2019-07-09
  • 2012-04-13
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多