![]() |
Eine Pfadangabe "säubern"?
Ich stelle mir gerade die Frage wie man am besten eine unsaubere Pfadangabe säubert.
Wie bekomme ich etwas Dreckiges wie
Delphi-Quellcode:
sauber sodass ich
C:\\123/45\67.
Delphi-Quellcode:
erhalte?
C:\123\45\67
Aktuell mache ich das so aber das ist sicher nicht so dolle oder?
Delphi-Quellcode:
Ich bin ein totaler Spagetti-Coder und möchte natürlich Neues lernen!
begin
if Trim(aDir) = '' then begin Result := ''; Exit; end; // Wenn aDir eine Dateiangabe ist warum auch immer, dann ... // aDir := ExtractFileDir(aDir); aDir := StringReplace(aDir, '/', '\', [rfReplaceAll]); while (AnsiEndsStr('\', aDir)) or AnsiEndsStr('.', aDir) do aDir := Copy(aDir, 1, Length(aDir) - 1); while Pos('\\', aDir) > 0 do aDir := StringReplace(aDir, '\\', '\', [rfReplaceAll]); while Pos('\ ', aDir) > 0 do aDir := StringReplace(aDir, '\ ', '\', [rfReplaceAll]); Result := Trim(aDir); end; |
AW: Eine Pfadangabe "säubern"?
Woher kommen denn diese "dreckigen" Pfadangaben?
Hintergrund meiner Frage ist: es könnte sich jemand etwas dabei gedacht haben! Gruß K-H |
AW: Eine Pfadangabe "säubern"?
Das können Benutzereingaben sein.
Ziel von mir ist es aber, alles was nicht dem Standard entspricht wegzufegen. Doppelte Querstriche oder welche die falsch herum sind, oder das erste Zeichen nach einem \ sollte auch kein Leerzeichen sein (C:\123\ 456\789\) und das letzte Zeichen eines Pfades sollte auch kein . sein. Das entfernt mein Code ja. Nur sicherlich alles andere als gut. |
AW: Eine Pfadangabe "säubern"?
Und schon rennst Du in das erste Problem, da z.B. Netzwerkverweise meist mit \\ beginnen, z.B.
Code:
Aus Erfahrung, versuche nicht zu bereinigen, sondern zu testen, ob die Eingabe sich verarbeiten lässt (z.B.: TFile.Exists, TDirectory.Exists, ...).
\\Servername\Pfad\Pfad\Datei.xyz
...:cat:... |
AW: Eine Pfadangabe "säubern"?
Zitat:
|
AW: Eine Pfadangabe "säubern"?
Zitat:
...:cat:... |
AW: Eine Pfadangabe "säubern"?
Und nicht vergessen, Leerzeichen sind in Pfadangaben durchaus erlaubt.
C:\123\ 456\789\ ist zulässig, wenn auch ungewöhnlich, von daher ist der Vorschlag, die Pfade zu prüfen, sinnvoll. Wenn dann ein Pfad ungültig ist, kann man versuchen, ihn durch das Ersetzen von (vermutlich) fehlerhaften Zeichen zu bereinigen und dann mit dem Bereinigten erneut probieren, ob es nun ein gültiger Pfad ist. Und / statt \ funktioniert unter Windows (außer auf der Kommandozeile) auch schon etwas länger. Allerdings ist eine einheitliche Nutzung sicher vorzuziehen. |
AW: Eine Pfadangabe "säubern"?
Also im Prinzip bist Du auf dem richtigen Weg. ich empfehle Dir nur Dich zuerst
![]() Ich habe den Eindruck daß du ein etwas rustikales Vorgehen bevorzugst. Gruß k-H |
AW: Eine Pfadangabe "säubern"?
Zitat:
Zitat:
Delphi-Quellcode:
var
bIsDirectory, bIsNetworkPath: Boolean; begin aPath := Trim(aPath); if aPath = '' then begin Result := ''; Exit; end; aPath := StringReplace(aPath, '/', '\', [rfReplaceAll]); bIsNetworkPath := Copy(aPath, 1, 2) = '\\'; bIsDirectory := ist aPath ein Verzeichnis? ... // Wenn aDir eine Dateiangabe ist warum auch immer, dann ... // aDir := ExtractFileDir(aDir); while Pos('\ ', aPath) > 0 do aPath := StringReplace(aPath, '\ ', '\', [rfReplaceAll]); if not bIsNetworkPath then while Pos('\\', aPath) > 0 do aPath := StringReplace(aPath, '\\', '\', [rfReplaceAll]); while (AnsiEndsStr('\', aPath)) or AnsiEndsStr('.', aPath) do aPath := Copy(aPath, 1, Length(aPath) - 1); Result := Trim(aPath); end; Zitat:
Wenn es hierfür was Fertiges gäbe, würde ich es sofort nehmen. Auf etwa dieselbe Art und Weise habe ich auch etwas zusammengebaut, was verbotene Zeichen in Dateinamen entfernt. Da aber mit einem Array. |
AW: Eine Pfadangabe "säubern"?
Zitat:
Delphi-Quellcode:
, von der Kommandozeile mit
ForceDirectories('c:\123\ 456\789\');
Delphi-Quellcode:
md "c:\123\ 456\789\"
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz