Gibt es eine Methode, um zu überprüfen, ob der angegebene Pfad der vollständige Pfad ist? Im Moment mache ich das:
if (template.Contains(":\\")) //full path already given
{
}
else //calculate the path from local assembly
{
}
Aber es muss einen eleganteren Weg geben, dies zu überprüfen?
c#
.net
validation
path
hs2d
quelle
quelle
IsPathRooted
: Vermeiden des Zugriffs auf das Dateisystem oder Auslösen von Ausnahmen für ungültige Eingaben.IsPathRooted
werden. Es war sicherlich nichts Bedeutendes. DieGetFullPath
Linie wurde aufgenommen, damit der zu bewertende Pfad beobachtet werden konnteDie obige Bedingung:
false
in den meisten Fällen zurück, in denen das Format vonpath
ungültig ist (anstatt eine Ausnahme auszulösen).true
nur zurück, wennpath
das Volume enthalten istIn Szenarien wie dem des OP ist es daher möglicherweise besser geeignet als die Bedingungen in den früheren Antworten. Im Gegensatz zu der oben genannten Bedingung:
path == System.IO.Path.GetFullPath(path)
löstfalse
in diesen Szenarien Ausnahmen aus, anstatt zurückzukehren :System.IO.Path.IsPathRooted(path)
Gibt zurück,true
wennpath
mit einem einzelnen Verzeichnistrennzeichen begonnen wird.Schließlich ist hier eine Methode, die die obige Bedingung umschließt und auch die verbleibenden möglichen Ausnahmen ausschließt:
EDIT: EM0 machte einen guten Kommentar und eine alternative Antwort auf den merkwürdigen Fall von Pfaden wie
C:
undC:dir
. Um zu entscheiden, wie Sie mit solchen Pfaden umgehen möchten, sollten Sie sich eingehend mit MSDN -> Windows-Desktopanwendungen -> Entwickeln -> Desktop-Technologien -> Datenzugriff und -speicherung -> Lokale Dateisysteme - befassen. -> Dateiverwaltung -> Informationen zur Dateiverwaltung -> Erstellen, Löschen und Verwalten von Dateien -> Benennen von Dateien, Pfaden und Namespaces -> Vollständig qualifizierte oder relative Pfadequelle
Versuchen
Funktioniert sowohl für UNC-Pfade als auch für lokale.
Z.B
quelle
Alte Frage, aber noch eine zutreffende Antwort. Wenn Sie sicherstellen möchten, dass das Volume in einem lokalen Pfad enthalten ist, können Sie System.IO.Path.GetFullPath () wie folgt verwenden:
quelle
GetFullPath
greift auf das Dateisystem zu und kann eine Reihe möglicher Ausnahmen auslösen. In meiner Antwort ( stackoverflow.com/a/35046453/704808 ) finden Sie eine Alternative, die weiterhin einen vollständigen Pfad gewährleistet.Aufbauend auf der Antwort von Weir : Dies führt nicht zu ungültigen Pfaden, sondern auch
false
zu Pfaden wie "C:", "C: dirname" und "\ path".Beachten Sie, dass dies unter Windows und Linux unterschiedliche Ergebnisse zurückgibt, z. B. "/ path" ist unter Linux absolut, aber nicht unter Windows.
Gerätetest:
quelle
So überprüfen Sie, ob ein Pfad vollständig qualifiziert ist (MSDN) :
Es ist ein bisschen einfacher als das, was bereits vorgeschlagen wurde, und es gibt immer noch false für Laufwerksrelationen wie
C:foo
. Seine Logik basiert direkt auf der MSDN-Definition von "voll qualifiziert", und ich habe keine Beispiele gefunden, bei denen es sich schlecht verhält.Interessanterweise scheint .NET Core 2.1 jedoch eine neue Methode zu haben,
Path.IsPathFullyQualified
die eine interne Methode verwendetPathInternal.IsPartiallyQualified
(Verbindungsposition genau ab 17.04.2018).Für die Nachwelt und eine bessere Selbstbeherrschung dieses Beitrags ist hier die Implementierung des letzteren als Referenz:
quelle
Dies ist die Lösung, die ich benutze
Es funktioniert folgendermaßen:
quelle
C:\foo\..\foo
oderC:\foo\.\.\.
Rufen Sie die folgende Funktion auf:
MSDN-Dokument: Path.IsPathFullyQualified-Methode
Das nützliche Zitat aus dem MSDN-Dokument lautet:
quelle
Ich bin mir nicht sicher, was Sie unter vollständigem Pfad verstehen (obwohl Sie aus dem Beispiel annehmen, dass Sie von der Wurzel an nicht relativ meinen). Nun, Sie können die Path- Klasse verwenden, um bei der Arbeit mit physischen Dateisystempfaden zu helfen, die abgedeckt werden sollten Sie für die meisten Eventualitäten.
quelle