Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations biv343 on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Most Resent File 2

Status
Not open for further replies.

JimFlower

Programmer
Jun 21, 2001
42
GB
I require to write a function that takes a directory name and returns the most recently created file in that directory.

Any Ideas
 
I don't know that this is the most elegant solution.

But you could sort the files using the FileDateTime function.

If you are only interested in when a file was created and not when it was modified- this wont help you.
 
as theo said this isn't going to be elegant but hey its api.

Okay here we go,
First put all the items into an array with this:

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
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As _
Long
Const MAX_PATH = 260

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

' Returns a one-based string array containing the files (or directories)
' located in the specified path
'
' the Path argument can contain wildcards, e.g. "C:\*.doc")

Function FilesToArray(ByVal Path As String, Optional ByVal IncludeDirs As _
Boolean) As String()
Dim lRet As Long
Dim handle As Long
Dim FindData As WIN32_FIND_DATA
Dim FileName As String
Dim fileCount As Long
Dim ok As Boolean
ReDim res(0) As String

' start the searching, exit if no file matches the spec
handle = FindFirstFile(Path, FindData)
If handle < 0 Then
FilesToArray = res()
Exit Function
End If

Do
' get this entry's name
FileName = Left$(FindData.cFileName, InStr(FindData.cFileName, _
vbNullChar) - 1)

If (FindData.dwFileAttributes And vbDirectory) = 0 Then
' this is a file
ok = Not IncludeDirs
ElseIf FileName <> &quot;.&quot; And FileName <> &quot;..&quot; Then
' this is a directory, but not a ./.. entry
ok = IncludeDirs
Else
' this is a ./.. entry
ok = False
End If

If ok Then
' add this entry to the result
fileCount = fileCount + 1
If fileCount > UBound(res) Then
' make room in the array if necessary
ReDim Preserve res(fileCount + 100) As String
End If
res(fileCount) = FileName
End If
' read the next file, returns zero when there are no more files
lRet = FindNextFile(handle, FindData)
Loop While lRet

' stop enumeration
FindClose handle

' discard unused array items and return to caller
ReDim Preserve res(0 To fileCount) As String
FilesToArray = res
End Function

Then use a for loop to go through each one checking its time with the FileDate Function.

Sorry I can't be of more help. Brad,
Free mp3 player,games and more.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top