Option Explicit
Private Const INVALID_HANDLE_VALUE As Long = -1&
Private Const MAX_PATH As Long = 260&
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10&
Private Const FILE_ATTRIBUTE_ARCHIVE As Long = &H20&
Private Const FILE_ATTRIBUTE_COMPRESSED As Long = &H800&
Private Const FILE_ATTRIBUTE_HIDDEN As Long = &H2&
Private Const FILE_ATTRIBUTE_NORMAL As Long = &H80&
Private Const FILE_ATTRIBUTE_READONLY As Long = &H1&
Private Const FILE_ATTRIBUTE_SYSTEM As Long = &H4&
Private Const FILE_ATTRIBUTE_TEMPORARY As Long = &H100&
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
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 Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Private Declare Function FileTimeToSystemTime Lib "kernel32" _
(lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
(ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" _
(ByVal lpFileName As String) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" _
(ByVal lpFileName As String) As Long
Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" _
(ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Public Function FileSearch(ByVal strFolder As String, LB As ListBox) As Boolean
Dim hFile As Long 'handle to a file
Dim WFD As WIN32_FIND_DATA
Dim strTemp As String
If Len(strFolder) <= 0 Then
FileSearch = False
Exit Function
End If
If Right$(strFolder, 1) <> "\" Then
strFolder = strFolder & "\"
End If
hFile = FindFirstFile(strFolder & "*" & vbNullChar, WFD)
If hFile <> INVALID_HANDLE_VALUE Then
strTemp = Left$(WFD.cFileName, InStr(1, WFD.cFileName, vbNullChar) - 1)
If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
strTemp = strTemp & "\"
If Right$(strTemp, 2) <> ".\" Then Call FileSearch(strFolder & strTemp, LB)
ElseIf Right$(strTemp, 4) = ".bak" Then
LB.AddItem strFolder & strTemp
End If
Do While FindNextFile(hFile, WFD)
strTemp = Left$(WFD.cFileName, InStr(1, WFD.cFileName, vbNullChar) - 1)
If (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
strTemp = strTemp & "\"
If Right$(strTemp, 2) <> ".\" Then Call FileSearch(strFolder & strTemp, LB)
ElseIf Right$(strTemp, 4) = ".bak" Then
'older than 7 days
If DateDiff("d", GetDate(WFD.ftLastAccessTime), Now) > 7 Then LB.AddItem strFolder & strTemp '& " -- " & GetDate(WFD.ftLastAccessTime)
End If
Loop
FileSearch = True
Call FindClose(hFile)
Else
FileSearch = False
End If
End Function
Private Function GetDate(FT As FILETIME) As String
Dim ST As SYSTEMTIME
If FileTimeToSystemTime(FT, ST) <> 0 Then
GetDate = ST.wMonth & "/" & ST.wDay & "/" & ST.wYear
Else
GetDate = ""
End If
End Function