Windows文件系统:当删除并重新创build时,文件的创build时间不会改变

我有以下情况:

事实certificate,Windows并不保证当用户创build文件时,它会改变创build时间,删除它并创build一个同名的文件。

我写了一个小的powershell脚本来validation这一点:

ls | Remove-Item $fileListOld = @{} foreach($i in 1..1000) { $fname = [string]::Format("{0}.txt", $i) "tst" >> $fname } ls | % { $fileListOld[$_.Name] = $_ } ls | Remove-Item foreach($i in 1..1000) { $fname = [string]::Format("{0}.txt", $i) "tst" >> $fname } $fileListNew = @{} ls | % { $fileListNew[$_.Name] = $_ } $count = 0 foreach ($fname in $fileListNew.Keys) { if ($fileListNew[$fname].CreationTimeUtc -eq $fileListOld[$fname].CreationTimeUtc) { Write-Host Same creation time -ForegroundColor Red Write-Host $fname -ForegroundColor Red $count++ } } Write-Host $count 

输出:

 ... ... Same creation time 241.txt Same creation time 944.txt Same creation time 908.txt Same creation time 631.txt Same creation time 175.txt Same creation time 798.txt Same creation time 192.txt Same creation time 961.txt Same creation time 476.txt Same creation time 566.txt Same creation time 945.txt Same creation time 681.txt Same creation time 880.txt Same creation time 162.txt Same creation time 634.txt Same creation time 746.txt Same creation time 442.txt Same creation time 35.txt Same creation time 96.txt Same creation time 771.txt Same creation time 787.txt Same creation time 972.txt Same creation time 642.txt Same creation time 495.txt Same creation time 625.txt Same creation time 666.txt Same creation time 660.txt Same creation time 6.txt Same creation time 593.txt Same creation time 549.txt Same creation time 842.txt Same creation time 314.txt Same creation time 148.txt **1000** 

如果我在睡眠一段时间(> 30s)后删除所有文件将有正确的时间戳。

有什么办法可以解决这个问题吗? 一些winapi电话,删除文件好?

Solutions Collecting From Web of "Windows文件系统:当删除并重新创build时,文件的创build时间不会改变"

我相信你在Windows中遇到一种称为文件系统隧道的现象。 这是基于NT的系统的特征,其中与同一目录中最近删除的文件具有相同名称的新文件将继承旧文件的创建时间。

您可以禁用隧道或更改旧文件数据缓存的时间长度。 有关详细信息,请参阅Microsoft知识库文章

文件系统隧道是由于许多应用程序将删除并重新创建他们希望改变的文件,而不是仅仅更新它们。

你应该可以使用@Jim Rhodes的建议来抵消这个功能。

创建文件后,可以使用SetFileTime更新创建时间。