vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 386: Kleiner Fehler in Tipp 386: Einen String auf einen zulässigen Pfad hin prüfen 
Autor: MaHumba
 Tipp anzeigenDatum: 05.12.11 12:00

Hallo,

ich habe in diesem Tipp einen kleinen Fehler entdeckt.
Bei einem String wie z.B. diesem: "\\<Computer\Pfad\"
Funktionsaufruf:
IsValidPath("\\<Computer\Pfad\")
Liefert die Funktion true zurück, obwohl es sich hiierbei definitiv um einen unzulässigen String handelt. (s. '<' an der dritten Stelle des Pfades)

Die Ursache liegt in der fixen Startposition der InStr-Funktion in den Statements:
...
  ' auf "verbotene" Zeichen prüfen
    ...
    If InStr(4, strPath, Mid$(InvalidChars, i, 1), 0) <> 0 Then
    ...
  bResult = (InStr(3, strPath, "\\") = 0 And _
    InStr(3, strPath, "/\") = 0 And _
    InStr(3, strPath, "\/") = 0)
 
 
  ...
Wenn die Funktion absolut zuverlässig arbeiten soll, muss die Startposition abhängig von den drei Varianten (lokaler Pfad (4), UNC-Pfad (3), relativer Pfad (2)) festgelegt werden.
...
Dim StartPos
...
If Left$(strPath, 2) <> "\\" Then
    If Mid$(strPath, 2, 1) = ":" Then
        ...
        StartPos = 4
        ...
    ElseIf Left$(strPath, 1) <> "\" Then
      bResult = False
    Else
        StartPos = 2
    End If
else
    StartPos = 3
End If
...
  ' auf "verbotene" Zeichen prüfen
...
    If InStr(StartPos, strPath, Mid$(InvalidChars, i, 1), 0) <> 0 Then
...
  bResult = (InStr(StartPos - 1, strPath, "\\") = 0 And _
    InStr(StartPos, strPath, "/\") = 0 And _
    InStr(StartPos - 1, strPath, "\/") = 0)
...
Wobei die letzten beiden Prüfungen sowieso niemals treffen sollten, weil weiter oben bereits alle '/' in '\' umgewandelt werden.
' alle normalen Slash's in Backslash's umwandeln
  strPath = Replace(strPath, "/", "\")
Grüße
Olaf

Beste Gr??e
Olaf

Beitrag wurde zuletzt am 05.12.11 um 12:03:20 editiert.

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tipp 386: Kleiner Fehler in Tipp 386: Einen String auf einen...2.446MaHumba05.12.11 12:00

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2019 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