如果文件被创建并写入一次,我期望 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)
在 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 将发生变化。
| 归档时间: |
|
| 查看次数: |
5715 次 |
| 最近记录: |