ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 05.02.2002

Diese Seite wurde zuletzt aktualisiert am 05.02.2002
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Sein oder nicht sein (3)

Zurück...


Anzeige

(-hg) mailto:hg_shpathfileexists@aboutvb.de

Es ist kaum zu glauben, dass eine Funktion zur Prüfung zur Existenz eines Pfades oder einer Datei nicht zum Grundsortiment der API- bzw. Shell-API-Funktionen gehört. Immerhin findet sich eine dementsprechende Funktion PathFileExists im "Shell Lightweight Utility API", das mit der seit Windows 98 bzw. dem Internet Explorer 4 hinzugekommenen Version 4.71 der Shlwapi.DLL zur Verfügung steht. Leider weiß sie nichts mit UNC-Pfaden nach dem Muster "\\Server\Pfad..." anzufangen. Weiterhin gibt es mehrere Workarounds, die auf Zweckentfremdung "indirekter Wahrnehmung" von Dateien, Ordnern, Laufwerken und auch Computern beruhen - etwa wie in Sein oder nicht sein"Sein oder nicht sein" und Sein oder nicht sein(2)"Sein oder nicht sein(2)" gezeigt. Dennoch - die gesuchte Funktion gibt es tatsächlich in der Shell32.DLL. Sie ist allerdings undokumentiert und namentlich gar nicht existent, sondern nur über ihre Ordinal-Nummer erreichbar:

Private Declare Function SHPathFileExists Lib "shell32" _
 Alias "#45" (ByVal szPath As String) As Long

Unter Windows 9x funktioniert sie problemlos und auf Anhieb und bestätigt die Existenz bzw. Nichtexistenz von Dateien, Ordnern, Laufwerken und Computern im Netzwerk. Unter Windows NT und Nachfolgern (2000, XP) scheint die Funktion jedoch zu streiken. Vielleicht haben Sie auch schon das bei API-Funktionen, die String-Parameter verarbeiten, oft gesehene Pendant zur Übergabe von ANSI-Strings mit dem Anhängsel "...A" vermisst. Ein Alias "#45A" dürfte jedoch wenig Sinn haben. Der Gedanke liegt nahe, dass unter einem NT-Windows ein Unicode-String übergeben werden muss, was sich mittels der VB-Funktion StrConv leicht erreichen lässt.

Existiert = SHPathFileExists(StrConv(Pfad, vbUnicode))

Doch diese Aufrufweise verhindert wiederum ein Resultat unter Windows 9x. Es bleibt also nur die Verzweigung zu zwei separaten Aufrufen. Ob sie es mit einem NT-Windows zu tun haben, können Sie anhand der Umgebungsvariablen "OS" entscheiden (siehe Windows-Version - ganz einfach"Windows-Version - ganz einfach"). Fehlt sie, handelt es sich um ein Windows 9x. Ist sie vorhanden, so ist ihr Inhalt in diesem Zusammenhang bedeutungslos.

Schließlich bleibt nur noch anzumerken, dass es der Funktion nichts ausmacht, wenn die zu prüfende Pfadangabe mit Leerzeichen endet - sie werden im Gegensatz zu führenden Leerzeichen völlig ignoriert. Und damit hätten wir eine einfache Prüffunktion, die auf der gesuchten API-Funktion aufsetzt:

Public Function PathFileExists(sPath As String) As Boolean
  If Len(Environ$("OS")) Then
    PathFileExists = _
     CBool(SHPathFileExists(StrConv(LTrim$(sPath), vbUnicode)))
  Else
    PathFileExists = CBool(SHPathFileExists(LTrim$(sPath)))
  End If
End Function

Modul modSHPathFileExists (modSHPathFileExists.zip - ca. 0,5 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer