比较 LastWriteTime 和 CreationTime

lit*_*lit 3 powershell

如果文件被创建并写入一次,我期望 LastWriteTime 与 CreationTime 相同。这段代码似乎表明这不是真的。这些时间戳存储的精度是否更高?ToString 和比较是唯一的方法吗?

PS 09:30  C:\src\t
>Get-ChildItem .\uu.txt | Select-Object -Property Name,LastWriteTime,CreationTime

Name   LastWriteTime       CreationTime
----   -------------       ------------
uu.txt 2019-08-09 09:23:25 2019-08-09 09:23:25


PS 09:30  C:\src\t
>Get-ChildItem .\uu.txt | ForEach-Object { $_.LastWriteTime -eq $_.CreationTime }
False
Run Code Online (Sandbox Code Playgroud)

更新:

我最终得到了以下代码。如果 LastWriteTime 和 CreationTime 之间的差异小于一秒,则假定文件自创建以来尚未更新。

$CloseEnough = New-Timespan -Seconds 1
Get-ChildItem -File -Path 'C:\src\t' |
    Where-object { ($_.LastWriteTime - $_.CreationTime) -lt $CloseEnough }
Run Code Online (Sandbox Code Playgroud)

ant*_*oni 6

在 Windows 中 - CreationTime 是在磁盘分区上创建文件的时间,LastWriteTime 是更新文件内容的时间。

因此,在文件创建时,LastWriteTime 是写入完成的时间,而创建时间是文件创建的时间。他们不一样。您可以通过测量写入时间来检查,该时间大致与 LastWriteTime 和 CreationTime 之间的差异相同:

$str = 1..10000 | % { "$_`n" } # list of values to write
Measure-Command { $str | Out-File test.txt }
Get-Item test.txt | % { New-TimeSpan $_.CreationTime $_.LastWriteTime }
Run Code Online (Sandbox Code Playgroud)

但是,如果您将文件移动到计算机上的其他分区/磁盘,CreationTime 将更新,但由于内容未更改,LastWriteTime 不会更改。因此,您最终会遇到 CreationTime 晚于 LastWriteTime 的情况。去检查:

Copy-Item c:\test.txt d:\test.txt
Get-Item c:\test.txt, d:\test.txt | select FullName, CreationTime, LastWriteTime
Run Code Online (Sandbox Code Playgroud)

您的 LastWriteTime 将保持不变,但 CreationTime 将发生变化。