Ich versuche festzustellen, ob eine von einem Benutzer eingegebene Zeichenfolge für die Darstellung eines Pfads zu einem Ordner gültig ist. Mit gültig meine ich richtig formatiert.
In meiner Anwendung repräsentiert der Ordner ein Installationsziel. Vorausgesetzt, der Ordnerpfad ist gültig, möchte ich feststellen, ob der Ordner vorhanden ist, und ihn erstellen, wenn dies nicht der Fall ist.
Ich benutze gerade IO.Directory.Exists( String path )
. Ich finde, dass dies gut funktioniert, außer wenn der Benutzer die Zeichenfolge nicht richtig formatiert. In diesem Fall gibt diese Methode false zurück, was darauf hinweist, dass der Ordner nicht vorhanden ist. Dies ist jedoch ein Problem, da ich den Ordner anschließend nicht mehr erstellen kann.
Beim Googeln habe ich einen Vorschlag gefunden, einen regulären Ausdruck zu verwenden, um zu überprüfen, ob das Format korrekt ist. Ich habe keine Erfahrung mit regulären Ausdrücken und frage mich, ob dies ein praktikabler Ansatz ist. Folgendes habe ich gefunden:
Regex r = new Regex( @"^(([a-zA-Z]\:)|(\\))(\\{1}|((\\{1})[^\\]([^/:*?<>""|]*))+)$" );
return r.IsMatch( path );
Würde Directory.Exists()
mir ein Test für reguläre Ausdrücke in Kombination mit eine ausreichend gute Methode geben, um zu überprüfen, ob der Pfad gültig ist und ob er existiert? Ich weiß, dass dies mit dem Betriebssystem und anderen Faktoren variieren wird, aber das Programm richtet sich nur an Windows- Benutzer.
quelle
Antworten:
Rufen Sie an
Path.GetFullPath
; Es werden Ausnahmen ausgelöst, wenn der Pfad ungültig ist.Word
Rufen Sie auf, um relative Pfade (z. B. ) nicht zuzulassenPath.IsPathRooted
.quelle
cd C:\\\\\\\Windows\\\\\\\System32
. Für Windows kann ich keine maßgebliche Quelle finden, die dieses Verhalten dokumentiert, würde aber natürlich einen Zeiger auf eine begrüßen.Ich bin eigentlich nicht einverstanden mit SLaks. Diese Lösung hat bei mir nicht funktioniert. Die Ausnahme ist nicht wie erwartet aufgetreten. Aber dieser Code hat bei mir funktioniert:
quelle
Path.GetFullPath gibt nur die folgenden Ausnahmen an
Alternativ können Sie Folgendes verwenden:
quelle
Hier ist eine Lösung, die die Verwendung von Path.GetFullPath nutzt, wie in der Antwort von @SLaks empfohlen .
Beachten Sie in dem Code, den ich hier einbinde,
IsValidPath(string path)
dass der Anrufer sich nicht um die Ausnahmebehandlung kümmern muss .Möglicherweise stellen Sie auch fest, dass die von ihr aufgerufene Methode
TryGetFullPath(...)
auch für sich allein von Nutzen ist, wenn Sie sicher versuchen möchten, einen absoluten Pfad zu erhalten .quelle
Verwenden Sie diesen Code
quelle
Path.GetInvalidFileNameChars().Any(DirectoryName.Contains) || DirectoryName == "con"
quelle
Ich hatte keine Probleme mit diesem Code:
Zum Beispiel würden diese false zurückgeben:
Und diese würden wahr zurückkehren:
quelle