Sie überprüfen die Existenz einer Datei [test.txt] im
Verzeichnis [C:\Windows].
Dann haben Sie eventuell bisher
x = Dir("C:\Windows\Test.txt") verwendet,
wobei x <> "" die Existenz der Datei angibt.
Sie möchten alle *.txt Dateien im C:\Windows Verzeichnis ausgeben.
x = Dir("C:\Windows\*.txt") für das erste Vorkommen
x = Dir
für alle weiteren Vorkommen.
Soweit die herkömliche Art, es geht natürlich auch über API,
und das wollen wir uns bei diesem Tipp etwas genauer anschauen.
Das ganze Geheimnis liegt in drei API Anweisungen. (FindFirst,FindNext,FindClose)
Gehen wir es also an.
In unserem Demoprojekt wollen wir alle *.ini Dateien im Windows Verzeichnis in
eine Listbox ausgeben. Passen Sie also gegebenenfalls den Pfad des Windowsverzeichnisses
an Ihre Umgebung an.
1. Benötigen wir ein neues Projekt. Dazu kommt ein CommandButton (Command1)
[ der die Aktion auslösen soll] und ein ListBox (List1) [für die
Datenausgabe].
2. Kommen wir nun zum Abschnitt Deklarationen, dazu gehören die drei schon
erwähnten API Funktionen und einige Typ Definitionen. 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
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
Dies alles packen Sie in den
Allgemein/Deklarationen Abschnitt Ihrer Form oder in ein
gesondertes Modul (dann allerdings nicht Private).
3. Kommen wir nun zur eigentlichen Aufgabe. Diese wird
dem CommandButton im
Click Event zugeordent. Command1_Click
Dim fd As WIN32_FIND_DATA
Dim handle_der_suche As Long
List1.Clear 'Listbox für neue
Einträge säubern
handle_der_suche =
FindFirstFile("C:\WINDOWS\*.ini", fd)
List1.AddItem fd.cFileName
Do
success =
FindNextFile(handle_der_suche, fd)
If success > 0 Then
List1.AddItem fd.cFileName
Loop While success > 0
success = FindClose(handle_der_suche)
4. Mehr braucht es nicht. Sie können nun Ihr Projekt mit
F5 für einen ersten Test
starten. |