我想获取位于共享文件夹中的txt文件的最后写入时间。我在另一个文件中写了最后一次写入时间。问题是我总是得到奇怪的DateTime(“星期日,12月31日,1600 4:00:00 PM”)。我在MSDN中找到了这个描述:“如果FileSystemInfo对象中描述的文件不存在,则此属性将返回午夜,即公元1601年1月1日午夜(CE)协调世界时(UTC),调整为当地时间。 “ 要检查我是否可以从文件中访问,我从该文件中加载了一些东西并且它可以工作。因此我的文件存在。如果我在本地驱动器上应用我的程序,我会得到正确的日期。以下代码代表我的程序:
$SharedFolder = "\\SharedFolder"
new-psdrive -name Z -psprovider FileSystem -root $SharedFolder
$usersFileName = "Z:\users.txt"
$file = New-object System.IO.FileInfo $usersFileName
$tempDate = $file.LastWriteTime
while($true){
$file2 = New-object System.IO.FileInfo $usersFileName
$tempDate2 = $file2.LastWriteTime
if($tempDate -ne $tempDate2)
{
$name ="ahs been changed"
$Name | out-file C:\users\test\desktop\test2.txt -append
$file = New-object System.IO.FileInfo $usersFileName
$tempDate = $file.LastWriteTime
}
$tempDate | out-file C:\users\test\desktop\test2.txt -append
Start-sleep -s 2
}
答案 0 :(得分:1)
而不是做
$file = New-object System.IO.FileInfo $usersFileName
你可以做到
$file = get-item $usersFileName
然后你仍然可以做$file.LastWriteTime
并获得适当的时间。
我认为自己创建一个FileInfo
对象不起作用,因为.Net方法可能不知道PsDrive,并且尽管Get-Item
返回的是,它能够处理它内部。请注意,使用共享路径自己创建对象确实给出了正确的时间,因此不是分享问题,而是使用PsDrive。
此外,您无需一次又一次地创建对象,然后检查FileInfo。您只需调用Refresh
方法即可。这与Get-Item
相同。您只需致电Refresh
即可获取更新时间。
顺便说一句,您似乎正在观看对文件的修改并将其记录下来。 .Net和Powershell(通过事件等)对做这些事情有很大的支持。看一下FileSystemWatcher(http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)