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);
}
Si intende un percorso relativo alla directory corrente, in altre parole la directory di lavoro o relativa alla posizione di .exe? –
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
@Amit Dhall: A proposito, è positivo accettare e modificare le risposte che ti aiutano. –