Rubrik: Dateisystem · Ordner & Verzeichnisse | VB-Versionen: VB4, VB5, VB6 | 23.08.02 |
Datei in vorgegebenen Systempfaden suchen Mit der WinAPI SearchPath ein Kinderspiel - das Durchsuchen der Systempfade nach einer bestimmten Datei. | ||
Autor: Dieter Otter | Bewertung: | Views: 26.594 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Sie möchten wissen, in welchem Verzeichnis sich NOTEPAD.EXE befindet? Oder der Windows-Explorer? Oder die Visual Basic Laufzeitdatei MSVBVM60.DLL?
Oder: Sie möchten einfach alle in der Umgebungsvariable PATH festgelegten Ordner nach einer bestimmten Datei durchsuchen.
Das alles ist mit der API-Funktion SearchPath ein Kinderspiel.
' Deklaration Private Declare Function SearchPath Lib "kernel32" _ Alias "SearchPathA" ( _ ByVal lpPath As String, _ ByVal lpFileName As String, _ ByVal lpExtension As String, _ ByVal nBufferLength As Long, _ ByVal lpBuffer As String, _ ByVal lpFilePart As String) As Long
Erläuterung:
Die SearchPath-Funktion durchsucht das in "lpPath" angegebene Verzeichnis nach einer bestimmten Datei. Wird für "lpPath" jedoch ein Nullstring angegeben, werden folgende Verzeichnisse durchsucht:
- das Anwendungsverzeichnis, in dem sich die Anwendung befindet (App.Path)
- das aktuelle Verzeichnis (CurDir)
- das Windows/Systemverzeichnis (SYSTEM bzw. SYSTEM32 unter NT/2k/XP)
- unter WinNT/2k/XP: zusätzlich das 16-Bit SYSTEM-Verzeichnis
- das Windowsverzeichnis
- alle Verzeichnisse aus der Umgebungsvariable PATH
Welche Pfade die Umgebungsvariable enthält, kann man über folgende Anweisung ermitteln:
MsgBox Environ("PATH")
Um nun z.B. zu ermitteln, in welchem Verzeichnis sich die MSVBVM60.DLL befindet, einfach folgenden Aufruf verwenden:
Dim sFile As String DIM nResult As Long Dim sBuffer As String ' Datei, nach der gesucht werden soll sFile = "MSVBVM60.DLL" ' Buffer für die Rückgabe des Verzeichnisses Const MAX_PATH = 260 sBuffer = Space$(MAX_PATH) ' Suchvorgang starten... nResult = SearchPath(vbNullString, sFile, "", Len(sBuffer), _ sBuffer, vbNullString) If nResult > 0 Then ' Datei gefunden MsgBox "Pfad: " & Left$(sBuffer, nResult) Else MsgBox "Datei nicht gefunden!" End If