2010-06-29 13 views

Antwort

11

Wenn man sich die Path Klasse aussehen gibt es ein paar Methoden, die helfen sollten:

Path.Combine 

und

Path.GetFullPath 

So:

string newPath = Path.Combine(basepath, relative); 
string absolute = Path.GetFullPath(newPath); 

Obwohl der zweite Schritt isn 't streng notwendig - es würde Ihnen einen "saubereren" Pfad geben, wenn Sie sagen, dass Sie drucken.

+0

Nice! 'Path.GetFullPath (Path.Combine (basispfad, relativ))' liefert, was ich brauche. –

0

Da Path.Combine nicht in allen Fällen funktionieren hier ist eine komplexere Funktion :-)

static string GetFullPath(string maybeRelativePath, string baseDirectory) { 
    if (baseDirectory == null) baseDirectory = Environment.CurrentDirectory; 
    var root = Path.GetPathRoot(maybeRelativePath); 
    if (string.IsNullOrEmpty(root)) 
     return Path.GetFullPath(Path.Combine(baseDirectory, maybeRelativePath)); 
    if (root == "\\") 
     return Path.GetFullPath(Path.Combine(Path.GetPathRoot(baseDirectory), maybeRelativePath.Remove(0, 1))); 
    return maybeRelativePath; 
} 

Path.Combine(@"C:\foo\",@"\foo\bar") kehrt @"\foo\bar" und nicht @"C:\foo\bar" erwartet

+1

"... returns \ foo \ bar und nicht wie erwartet C: \ foo \ bar" - Ich weiß nicht, warum Sie das erwarten, da die Dokumentation explizit besagt: "Wenn path2 einen absoluten Pfad enthält, gibt diese Methode path2 zurück . " – Joe

+0

\ foo \ bar ist nicht absolut auf Windows fehlt der Laufwerksbuchstabe als absolut - C: \ foo \ bar ist es ^^ – kux

+0

Mit "erwartet" meinte ich "erwartet von der Magic-Methode" ^^ – kux

Verwandte Themen