How to return the create date/time, last accessed date/time, last modified date/time of a given file
Posted on January 5, 2009
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 'System & API - How to return the create date/time, last accessed date/time, last modified date/time of a given file Option Explicit Private Type FileTime dwLowDateTime As Long dwHighDateTime As Long End Type Private Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Private Const GENERIC_WRITE = &H40000000 Private Const OPEN_EXISTING = 3 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, _ lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) As Long Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, _ ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FileTime, _ lpSystemTime As SYSTEMTIME) As Long Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FileTime, _ lpLocalFileTime As FileTime) As Long Public Sub FileDateTime(strFileName As String) 'This function returns create date and time of the given file. Dim lngHandle As Long Dim Ft1 As FileTime, Ft2 As FileTime, Ft3 As FileTime, Ft4 As FileTime, SysTime As SYSTEMTIME 'Open the file lngHandle = CreateFile(strFileName, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) 'Get the file time GetFileTime lngHandle, Ft1, Ft2, Ft3 'Convert the file time to the local file time FileTimeToLocalFileTime Ft1, Ft4 'Convert the file time to system file time FileTimeToSystemTime Ft4, SysTime Debug.Print "Date Created : " & Str$(SysTime.wMonth) & "/" & LTrim(Str$(SysTime.wDay)) & "/" & LTrim(Str$(SysTime.wYear)) & " " & Str$(SysTime.wHour) & ":" & LTrim(Str$(SysTime.wMinute)) & ":" & LTrim(Str$(SysTime.wSecond)) 'Convert the file time to the local file time FileTimeToLocalFileTime Ft3, Ft4 'Convert the file time to system file time FileTimeToSystemTime Ft4, SysTime Debug.Print "Date Last Modified : " & Str$(SysTime.wMonth) & "/" & LTrim(Str$(SysTime.wDay)) & "/" & LTrim(Str$(SysTime.wYear)) & " " & Str$(SysTime.wHour) & ":" & LTrim(Str$(SysTime.wMinute)) & ":" & LTrim(Str$(SysTime.wSecond)) 'Convert the file time to the local file time FileTimeToLocalFileTime Ft2, Ft4 'Convert the file time to system file time FileTimeToSystemTime Ft4, SysTime Debug.Print "Date Last Accessed : " & Str$(SysTime.wMonth) & "/" & LTrim(Str$(SysTime.wDay)) & "/" & LTrim(Str$(SysTime.wYear)) & " " & Str$(SysTime.wHour) & ":" & LTrim(Str$(SysTime.wMinute)) & ":" & LTrim(Str$(SysTime.wSecond)) 'Close the file CloseHandle lngHandle End Sub 'How can I call this sub-routine: 'Call FileDateTime("C:\Temp\Test.txt") 'Returns: 'Date Created : 3/24/2007 9:19:28 'Date Last Modified : 1/9/2007 14:57:10 'Date Last Accessed : 3/25/2007 2:27:8 |