Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpDateiname 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 GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpDateiname As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Const SW_SHOWNORMAL = 1
Const MAX_Ordner = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &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
nDateigroesseHigh As Long
nDateigroesseLow As Long
dwReserved0 As Long
dwReserved1 As Long
cDateiname As String * MAX_Ordner
cAlternate As String * 14
End Type
Function StripNull(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNull = OriginalStr
End Function
Function DirScan(Ordner As String, Dateityp As String, Dateizaehler As Long, Ordnerzaehler As Long)
Dim Dateiname As String
Dim Ordnername As String
Dim Ordnernamen() As String
Dim Ordneranzahl As Long
Dim i As Integer
Dim Suche As Long
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
If Right(Ordner, 1) <> "\" Then Ordner = Ordner & "\"
Ordneranzahl = 0
ReDim Ordnernamen(Ordneranzahl)
Cont = True
Suche = FindFirstFile(Ordner & "*", WFD)
If Suche <> INVALID_HANDLE_VALUE Then
Do While Cont
DoEvents
Ordnername = StripNull(WFD.cDateiname)
If (Ordnername <> ".") And (Ordnername <> "..") Then
If GetFileAttributes(Ordner & Ordnername) And FILE_ATTRIBUTE_DIRECTORY Then
Ordnernamen(Ordneranzahl) = Ordnername
Ordnerzaehler = Ordnerzaehler + 1
Ordneranzahl = Ordneranzahl + 1
ReDim Preserve Ordnernamen(Ordneranzahl)
End If
End If
Cont = FindNextFile(Suche, WFD)
Loop
Cont = FindClose(Suche)
End If
Suche = FindFirstFile(Ordner & Dateityp, WFD)
Cont = True
If Suche <> INVALID_HANDLE_VALUE Then
While Cont
Dateiname = StripNull(WFD.cDateiname)
If (Dateiname <> ".") And (Dateiname <> "..") Then
DirScan = DirScan + (WFD.nDateigroesseHigh * MAXDWORD) + WFD.nDateigroesseLow
Dateizaehler = Dateizaehler + 1
List1.AddItem Ordner & Dateiname
End If
Cont = FindNextFile(Suche, WFD)
Wend
Cont = FindClose(Suche)
End If
If Ordneranzahl > 0 Then
For i = 0 To Ordneranzahl - 1
DirScan = DirScan + DirScan(Ordner & Ordnernamen(i) & "\", Dateityp, Dateizaehler, Ordnerzaehler)
Next i
End If
End Function
Sub Command1_Click()
Dim SuchOrdner As String, FindStr As String
Dim Dateigroesse As Long
Dim NumFiles As Long, NumDirs As Long
Screen.MousePointer = vbHourglass
List1.Clear
SuchOrdner = Text1.Text
FindStr = Text2.Text
Dateigroesse = DirScan(SuchOrdner, FindStr, NumFiles, NumDirs)
Label3.Caption = NumFiles & " Dateien"
Label4.Caption = NumDirs + 1 & " Ordner"
Label5.Caption = Format(Dateigroesse, "#,###,###,##0") & " Bytes"
Screen.MousePointer = vbDefault
End Sub
Private Sub Command2_Click()
Dim strResFolder As String
strResFolder = BrowseForFolder(hWnd, "Bitte wählen Sie einen Ordner:")
If strResFolder <> "" Then Text1.Text = strResFolder
End Sub
Private Sub Command3_Click()
If List1.ListIndex >= 0 Then
ShellExecute Me.hWnd, "open", List1.Text, vbNullString, "C:\", SW_SHOWNORMAL
End If
End Sub