Sogenannte "UNC-Pfade" kommen immer dann ins Spiel, wenn Ressourcen im Netz (auf einem "File-Server") benutzt werden sollen. Einem öfter benötigtem Server-Verzeichnis wird der Einfachheit halber oft ein Laufwerk zugeordnet (z.B. als "Arbeitsgruppen-Laufwerk", im Beispiel W. Dann kann z.B. statt mit der unübersichtlichen UNC-Notation \\FileSvr2\WebAG\Infos\ einfach über ein "virtuelles" Laufwerk zugegriffen werden: W:\Infos\ Nachfolgend werden zwei Funktionen vorgestellt, welche gerade die Umwandlung zwischen UNC- und Laufwerks-Pfad erlauben. Laufwerks- nach UNC-Pfad ' zunächst die benötigte API-Deklaratione Private Declare Function WNetGetConnectionA Lib "mpr.dll" ( _ ByVal lpszLocalName As String, _ ByVal lpszRemoteName As String, _ cbRemoteName As Long) As Long Die folgende Funktion nutzt die o.g. API-Routine, wobei der ggf. angehängte Pfad besonders behandelt wird. Wird ein unbekanntes Laufwerk angegeben, so wird eine entsprechende Fehlermeldung zurückgegeben (kann mit IgnoreErrors = True unterdrückt werden). Public Function UNCPath(ByVal Path As String, _ Optional IgnoreErrors As Boolean = False) As String Dim UNC As String * 512 If Len(Path) = 1 Then Path = Path & ":" If Right$(Path, 1) <> "\" Then Path = Path & "\" If WNetGetConnectionA(Left$(Path, 2), UNC, Len(UNC)) Then ' API-Routine gibt Fehler zurück: If IgnoreErrors Then UNCPath = Path Else Err.Raise 5 ' Invalid procedure call or argument End If Else ' Ergebnis zurückgeben: UNCPath = Left$(UNC, InStr(UNC, vbNullChar) - 1) _ & Mid$(Path, 3) End If End Function UNC- nach Laufwerks-Pfad ' zunächst die benötigten API-Deklarationen Private Declare Function GetLogicalDriveStringsA Lib "kernel32" ( _ ByVal nBufferLength As Long, _ ByVal lpBuffer As String) As Long Public Function LogicalDrives() As Collection Dim s As String * 128 Dim i As Long ' API aufrufen: GetLogicalDriveStringsA Len(s), s i = InStr(s, vbNullChar & vbNullChar) ' Länge ' Collection füllen: Set LogicalDrives = New Collection For i = 1 To i Step 4 LogicalDrives.Add Mid$(s, i, 2) Next i End Function ' Ermittelt das Laufwerk für einen UNC-Pfad Public Function DrivePath(ByVal Path As String, _ Optional IgnoreErrors As Boolean = False) As String Dim Drive As Variant Dim UNC As String ' Alle Laufwerke durchsuchen: If Right$(Path, 1) <> "\" Then Path = Path & "\" For Each Drive In LogicalDrives <findfile.htm>() UNC = UNCPath(Drive, True) If InStr(1, Path, UNC, vbTextCompare) = 1 Then Exit For Next Drive If IsEmpty(Drive) Then ' Kein Laufwerk für UNC gefunden: If IgnoreErrors Then DrivePath = Path Else Err.Raise 5 'Invalid procedure call or argument End If Else ' Ergebnis zurückgeben: DrivePath = Drive & Mid$(Path, Len(UNC)) End If End Function Anmerkung: Dieser Tipp wurde bereits 35.945 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |