Я использую функцию для проверки временных меток на файлах на удаленных компьютерах. У нас много компьютеров.GetLastWriteTime неточно
То, что я использую, немного странно.
Я запускаю запрос на большом количестве компьютеров. Временная метка на Computer26887 появляется как «1/4/2013 12:46:01 AM» I UNC на этот компьютер и проверьте файл. В проводнике временная метка говорит «9/16/2013 11:23 утра» (полтора часа назад) Хммм .... Запрос снова - тот же старый, неправильный, метка времени. Я нажимаю правой кнопкой мыши на файле, перехожу к свойствам и нажимаю «Детали» в окне свойств - «Дата изменена 9/16/2013 11:23 утра» Запрос снова с кодом vb - теперь он показывает правильную метку времени? ??
У меня есть сотни систем, чтобы пройти, и если я не могу доверять данным, которые получаю, у меня слишком много работы!
Любые идеи?
Update
В основном, VB.NET является извлечение кэшированных версий метки времени. Временная метка обновлена, но кеш по-прежнему имеет старую метку времени. Как заставить кеш обновляться без ручного открытия свойств файла в проводнике?
Shared Function GetFileInfo(ByVal ComputerName As String, ByVal FiletoFind As String, info As String)
Dim Ret As String = ""
Dim targetfile = "\\" & ComputerName & "\" & FiletoFind
Dim fi As FileInfo = New FileInfo(targetfile)
If fi.Exists Then
fi.refresh
Select Case info
Case Is = "Exists"
Ret = fi.Exists.ToString
Case Is = "Delete"
fi.Delete()
Ret = fi.Exists.ToString
Case Is = "Created"
Ret = fi.CreationTime.ToString("MM/dd/yyyy hh:mm:ss tt")
Case Is = "Access"
Ret = fi.LastAccessTime.ToString("MM/dd/yyyy hh:mm:ss tt")
Case Is = "Mod"
Ret = fi.LastWriteTime.ToString("MM/dd/yyyy hh:mm:ss tt")
End Select
Else
Ret = "File Not Found"
End If
Ret = Ret.Replace(vbCrLf, "")
Ret = Ret.Replace(vbCr, "")
Return Ret
End Function
(я также попытался использовать File
вместо FileInfo
... проверить историю пост)
UPDATE
Как испытание, я сделал проверку файлов в системе, используя код AutoIT3 , Он вернул точную информацию. После проверки AutoIT3 vb.net вернула точные временные метки. Итак, в чем проблема с vb.net, что AutoIT3 делает лучшую работу?
Func _timestampchk($path)
Dim $file,$astamp
$file = $path
$astamp = FileGetTime($file, 0, 0)
If IsArray($astamp) Then
$stamp = $astamp[1] & "/" & $astamp[2] & "/" & $astamp[0] & " " & $astamp[3] & ":" & $astamp[4]
ElseIf $astamp = 0 Then
$stamp = "File " & $path & " not Found"
Else
$stamp = 0
EndIf
Return $stamp
EndFunc ;==>_timestampchk
Это звучит странно. Есть ли вероятность, что что-то происходит с разницей в часовом поясе? Кстати, как и предположение, вы можете захотеть использовать 'MessageBox.Show' вместо' MsgBox', 'Ret.Replace' вместо' Replace' и либо сделать 'info'' Enum', либо взломать метод в отдельный метод для каждого «случая». –
Это довольно нормально, файловая система не обязана постоянно обновлять атрибут, пока процесс имеет открытый файл. В статье MSDN для этого есть громкое примечание. Единственная гарантия, которую вы имеете, - это то, что все процессы закрывают дескриптор файла. То, что вам будет трудно увидеть с удаленной машины. –
@HansPassant - Это ДНИ, не имеющие точной метки времени с vb.net - точный в проводнике и т. д. Эти файлы не используются и не используются постоянно. Временная метка должна быть доступна не менее 30 минут. Это были дни на некоторых - и я могу «заставить» синхронизировать между проводником и тем, что смотрит vb .net, как описано выше. – BobbyKearan