我剛剛注意到刪除並重新寫入文件時出現了一個奇怪的行爲:如果兩個操作之間的間隔足夠短,文件創建時間不會更新。刪除並重新創建時,Ghost文件保持活動狀態
我跑到下面的代碼:
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的實例之前關閉流。如果直接查看文件系統(在DIR中使用DIR或使用Windows資源管理器,則可能會找到預期的創建時間)。 –
@OllieJones'}'在使用塊的末尾關閉流。我沒有提到它,但我也可以在資源管理器屬性窗口中看到這個創建時間問題。 – Zonko