我正在使用一个函数检查远程计算机上文件的时间戳。我们有很多电脑。
我遇到的有点奇怪。
我在很多电脑上运行查询。 Computer26887上的时间戳出现为“1/4/2013 12:46:01 AM” 我UNC到那台电脑并检查文件。在资源管理器中,时间戳说“9/16/2013 11:23 AM”(一个半小时前)嗯.... 再次查询 - 相同的旧的,错误的,时间戳。我右键单击该文件,转到属性,然后单击属性窗口中的“详细信息” - “修改日期9/16/2013 11:23 AM” 使用vb代码再次查询 - 现在它显示正确的时间戳????
我有数百个系统可以通过,如果我不相信我得到的数据,我有太多的工作要做!
有什么想法吗?
更新
基本上,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
...查看帖子历史记录)
更新
作为测试,我使用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
答案 0 :(得分:0)
尝试使用Andrew Morton指出的FileSystem.GetFileInfo和neoistheone
Dim information = My.Computer.FileSystem.GetFileInfo("C:\MyLogFile.log")
information.Refresh() ' Calls must be made to Refresh before attempting to get the attribute information, or the information will be outdated.
MsgBox("The file's full name is " & information.FullName & ".")
MsgBox("Last access time is " & information.LastAccessTime & ".")
MsgBox("The length is " & information.Length & ".")
虽然有记载和理由,但这是一种奇怪的行为。 作为好奇心,我也会尝试下面的代码,看看问题是否也会发生。 尝试使用Windows API并查看它是否仍然返回“缓存”数据。
Declare Function GetFileTime Lib "kernel32.dll" (ByVal hFile _
As Long, lpCreationTime As FILETIME, lpLastAccessTime _
As FILETIME, lpLastWriteTime As FILETIME) As Long
如果没有解决,请尝试以编程方式调用“打开属性”窗口,然后阅读日期时间信息,看看它是否解决了问题:
'#VBIDEUtils#***********************************************
' * Programmer Name : Waty Thierry
' * Web Site : www.geocities.com/ResearchTriangle/6311/
' * E-Mail : waty.thierry@usa.net
' * Date : 28/06/99
' * Time : 13:16
' ********************************************************
' * Comments : Showing the Properties dialog box
' *
' * This tip demonstrates how To use the Win32 API To
' * bring up the explorer properties
' * dialog box For a specified file.
' * This API Function has the same effect As Right
' * clicking On a file In Windows 95 And selecting properties.
' **************************************************
Option Explicit On
Private Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
Private Const SEE_MASK_INVOKEIDLIST = &HC
Private Const SEE_MASK_NOCLOSEPROCESS = &H40
Private Const SEE_MASK_FLAG_NO_UI = &H400
Private Declare Function ShellExecuteEX Lib "shell32.dll" Alias _
"ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long
Public Function ShowProps(FileName As String, _
OwnerhWnd As Long) As Boolean
'USAGE:
'To show the properties dialog box of "c:\autoexec.bat", use the following code:
'Call ShowProps("c:\autoexec.bat", Me.hwnd)
'Function will return false if
'property windows can't be shown for
'any reason (e.g., invalid file or Ownerhwnd)
On Error Resume Next
Dim SEI As SHELLEXECUTEINFO
Dim r As Long
With SEI
.cbSize = Len(SEI)
.fMask = SEE_MASK_NOCLOSEPROCESS Or _
SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
.hwnd = OwnerhWnd
.lpVerb = "properties"
.lpFile = FileName
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
r = ShellExecuteEX(SEI)
ShowProps = r
End Function