VB-Homepage Tipp 362

Existprüfung von Dateien via API [FindFirst,FindNext]

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.


Tipp-Download

Quelle :

Zurück zur Übersichtsseite