2009-09-09 15 views
64

Come si converte un percorso relativo in un percorso assoluto in un'applicazione Windows?Come convertire un percorso relativo in un percorso assoluto in un'applicazione Windows?

So che possiamo utilizzare server.MapPath() in ASP.NET. Ma cosa possiamo fare in un'applicazione Windows?

Voglio dire, se c'è una funzione built-in in grado di gestire che .NET ...

+1

Si intende un percorso relativo alla directory corrente, in altre parole la directory di lavoro o relativa alla posizione di .exe? –

+1

Esistono due tipi di percorsi relativi. Uno se della forma "A \ B \ C" e non implica una base particolare. L'altro ha il formato ". \ A \ B" o ".. \ A \ B"; quelli sono relativi alla directory di lavoro corrente. – MSalters

+0

@Amit Dhall: A proposito, è positivo accettare e modificare le risposte che ti aiutano. –

risposta

129

Hai provato:

string absolute = Path.GetFullPath(relative); 

? Si noti che utilizzerà la directory di lavoro corrente del processo, non la directory contenente l'eseguibile. Se ciò non aiuta, chiarisci la tua domanda.

+2

Non dipende da dove viene avviata l'app, non dipende da dove si trova l'exe? Certo, la domanda non è chiara su questo. –

+0

Come dici tu, la domanda non è chiara. GetFullPath verrà risolto dalla directory di lavoro corrente. Modificherò la mia risposta per indicarlo. –

+0

Se un'applicazione viene avviata tramite Windows Explorer, sembra che la directory corrente e la directory dell'assembly di esecuzione siano uguali (almeno finché non viene fatto qualcosa per renderle diverse). Questo è vero anche se si utilizza una scorciatoia per l'eseguibile in cui la scorciatoia risiede in un punto completamente diverso. – H2ONaCl

17

Se si desidera ottenere il percorso relativo al vostro exe quindi utilizzare

string absolute = Path.Combine(Application.ExecutablePath, relative); 
+1

O, più in generale, Path.Combine (myBasePath, relativo) ... –

+3

Basta fare attenzione con Path.Combine. Se la parte 'relativa' inizia con una barra, potrebbe non fare ciò che pensi che sarebbe. –

+1

@silky: beh, allora non è relativo, vero? –

11

Questo funziona per i percorsi su diversi dischi, per percorsi di unità-relativa e per i percorsi relativi effettivi. Diamine, funziona anche se lo basePath non è effettivamente assoluto; utilizza sempre la directory di lavoro corrente come fallback finale.

public static String GetAbsolutePath(String relativePath, String basePath) 
{ 
    if (relativePath == null) 
     return null; 
    if (basePath == null) 
     basePath = Path.GetFullPath("."); // quick way of getting current working directory 
    else 
     basePath = GetAbsolutePath(basePath, null); // to be REALLY sure ;) 
    String path; 
    // specific for windows paths starting on \ - they need the drive added to them. 
    // I constructed this piece like this for possible Mono support. 
    if (!Path.IsPathRooted(relativePath) || "\\".Equals(Path.GetPathRoot(relativePath))) 
    { 
     if (relativePath.StartsWith(Path.DirectorySeparatorChar.ToString())) 
      path = Path.Combine(Path.GetPathRoot(basePath), relativePath.TrimStart(Path.DirectorySeparatorChar)); 
     else 
      path = Path.Combine(basePath, relativePath); 
    } 
    else 
     path = relativePath; 
    // resolves any internal "..\" to get the true full path. 
    return Path.GetFullPath(path); 
} 
+0

Ottima soluzione perché combina il percorso assoluto o parente in base a un percorso di base. A mio parere, l'argomento relativoPath dovrebbe essere rinominato in AbsoluteOrRelativePath, poiché è ciò che rappresenta realmente. Grazie –

+0

Beh, se è già un percorso assoluto, questo è solo un caso speciale, davvero ... la funzione è ancora pensata per risolvere percorsi relativi, lol. L'ho appena chiamato per chiarire quale parametro è quale;) – Nyerguds

+0

@JulioNobre, specialmente perché gli argomenti qui sono invertiti rispetto a 'Path.Combine'. Questo è facilmente risolvibile, ma lo evito poiché spesso lo uso per risolvere i percorsi relativi nella directory di lavoro, e dare null come prima sembra strano. – Nyerguds

Problemi correlati