vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB621.11.01
Einen String auf einen zulässigen Pfad hin prüfen

Mit dieser Funktion lassen sich beliebige Strings auf eine zulässige Pfadangabe hin prüfen.

Autor:   Alex KrauseBewertung:     [ Jetzt bewerten ]Views:  28.325 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Ein oft vorkommendes Szenario. Der Anwender eines Programms wird dazu aufgefordert, einen Pfad einzugeben - um z.B. dort eine Datenbank zu erstellen, oder einfach nur irgendwelche Einstellungen und/oder Dateien darin zu speichern.

Nun gibt der Anwender also einen Pfad ein und klickt auf OK. Jetzt sollte die Eingabe aber sicherheitshalber von Ihrer Anwendung geprüft werden, d.h. es sollte eine Prüfung erfolgen, ob es sich um eine gültige Pfadangabe handelt. Hierzu lassen sich bestimmte Prüfkriterien verwenden, so z.B.:

  • beginnt der Pfad mit einem Buchstaben, gefolgt von einem Doppelpunkt und einem Backslash?
  • beginnt der Pfad mit einem Doppel-Backslash (UNC-Pfad)?
  • beginnt der Pfad mit einem einfachen Backslash?
Trifft keines dieser drei Prüfkriterien zu, so handelt es sich um eine ungültige Pfadangabe. Es gibt aber noch weitere Kriterien, welche geprüft werden sollten (z.B., ob der Pfad unzulässige Zeichen enthält).

Die nachfolgende Funktion erledigt dies für Sie. Sie übergeben der Funktion einfach den zu prüfenden Pfad und bekommen entweder True (Pfad OK) oder False (Pfad ungültig) zurück.

' Prüft einen String, ob dieser evtl. eine
' Pfadstruktur darstellt
Public Function IsValidPath(ByVal strPath As String) _
  As Boolean
 
  Dim bResult As Boolean
  Dim intAscii As Integer
  Dim i As Long
 
  ' nicht erlaubte Zeichen
  Dim InvalidChars As String
  InvalidChars = ":*?<>|" & Chr$(34)
 
  ' Default-Rückgabewert der Funktion
  IsValidPath = False
 
  ' alle normalen Slash's in Backslash's umwandeln
  strPath = Replace(strPath, "/", "\")
 
  ' \.\ mit Leerstring ersetzen
  strPath = Replace(strPath, "\.\", "")
 
  ' Prüfung nach den wichtigsten Eigenschaften
  ' Ein gültiger Pfad beginnt entweder:
  '  1) mit einem Doppel-Backslash (UNC-Pfad)
  '  2) einem Buchstaben, gefolgt von einem Doppelpunkt
  '  3) einem normalen Backslash
 
  bResult = True
  If Left$(strPath, 2) <> "\\" Then
    If Mid$(strPath, 2, 1) = ":" Then
      ' Wenn zweites Zeichen ein Doppelpunkt ist,
      ' muss das erste Zeichen ein Buchstabe A-Z sein
      intAscii = Asc(Left$(UCase$(strPath), 1))
      If intAscii < 64 Or intAscii > 90 Then
        bResult = False
      Else
        ' wenn Buchstabe + Doppelpunkt, dann muss als
        ' drittes Zeichen ein Backslash folgen
        bResult = (Mid$(strPath, 3, 1) = "\")
      End If
    ElseIf Left$(strPath, 1) <> "\" Then
      bResult = False
    End If
  End If
  If Not bResult Then Exit Function
 
  ' auf "verbotene" Zeichen prüfen
  For i = 1 To Len(InvalidChars)
    If InStr(4, strPath, Mid$(InvalidChars, i, 1), 0) <> 0 Then
      bResult = False
    End If
  Next i
  If Not bResult Then Exit Function
 
  ' Was auch nicht vorkommen darf, sind folgende
  ' Kombinationen
  bResult = (InStr(3, strPath, "\\") = 0 And _
    InStr(3, strPath, "/\") = 0 And _
    InStr(3, strPath, "\/") = 0)
  If Not bResult Then Exit Function
 
  ' wird ein Punkt nach einem Backslash gefunden,
  ' so muss dem .\ folgen (also ..\), ansonsten
  ' ist der Pfad ebenfalls ungültig, da ein Ordner
  ' niemals mit einem Punkt beginnen darf
  i = 0
  Do
    i = InStr(i + 1, strPath, "\.")
    If i > 0 Then
      If Mid$(strPath, i + 2, 2) <> ".\" Then
        bResult = False
      End If
    End If
  Loop Until i = 0 Or bResult = False
  If bResult = False Then Exit Function
 
  IsValidPath = True
End Function

Die Funktion lässt sich sicherlich noch um das ein oder andere Prüfkriterium erweitern. Sollte Ihnen hierzu noch etwas einfallen, lassen Sie es uns wissen

Die in der Funktion verwendete Replace-Funktion ist erst ab VB6 vorhanden. Für VB4/5 empfehlen wir folgende "Ersatz-Funktion" zu verwenden:  Blitzschnelle Replace-Funktion (auch für VB6)
 

Dieser Tipp wurde bereits 28.325 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (1 Beitrag)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel