2010-06-29 18 views

risposta

11

Se guardate la classe Path ci sono un paio di metodi che dovrebbe aiutare:

Path.Combine 

e

Path.GetFullPath 

Quindi:

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

Anche se la seconda isn passo 'strettamente necessario - ti darebbe un percorso "più pulito" se dovessi stampare dire.

+0

Nizza! 'Path.GetFullPath (Path.Combine (base, relativo)) restituisce ciò di cui ho bisogno. –

0

Perché Path.Combine non funziona in tutti i casi qui è una funzione più complessa :-)

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") rendimenti @"\foo\bar" e non come previsto @"C:\foo\bar"

+1

"... restituisce \ foo \ bar e non come previsto C: \ foo \ bar" - Non so perché te lo aspetti, poiché la documentazione afferma esplicitamente che "Se path2 contiene un percorso assoluto, questo metodo restituisce path2 ". – Joe

+0

\ foo \ bar non è assoluto su Windows manca la lettera di unità per essere assoluto - C: \ foo \ bar è ^^ – kux

+0

Con "previsto" intendevo "previsto dal metodo Magic" ^^ – kux