Как получить абсолютный путь к файлу из базового пути и относительного, содержащего ".."? - PullRequest
8 голосов
/ 29 июня 2010
string basepath = @"C:\somefolder\subfolder\bin"; // is defined in runtime
string relative = @"..\..\templates";

string absolute = Magic(basepath, relative); // should be "C:\somefolder\templates"

Можете ли вы помочь мне с Magic методом? Надеюсь, не слишком сложный код.

Есть ли в .NET Framework метод "Magic"?

Ответы [ 2 ]

12 голосов
/ 29 июня 2010

Если вы посмотрите на класс Path, есть пара методов, которые должны помочь:

Path.Combine

и

Path.GetFullPath

Итак:

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

Хотя второй шаг не является строго необходимым - он даст вам «более чистый» путь, если вы печатаете, скажем.

0 голосов
/ 23 мая 2013

Поскольку Path.Combine работает не во всех случаях, здесь есть более сложная функция: -)

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") возвращает @"\foo\bar" и не так, как ожидалось @"C:\foo\bar"

...