Существует ли метод в С# для получения относительного пути, заданного двумя абсолютными входами пути?
Существует ли метод в С# для получения относительного пути, заданного двумя абсолютными входами пути?
То есть у меня будет два входа (с первой папкой в качестве базы), например
c:\temp1\adam\
и
c:\temp1\jamie\
Тогда выход будет
..\jamie\
Ответ 1
Не уверен, есть ли лучший способ, но это будет работать:
var file1 = @"c:\temp1\adam\";
var file2 = @"c:\temp1\jamie\";
var result = new Uri(file1)
.MakeRelativeUri(new Uri(file2))
.ToString()
.Replace("/", "\\");
Ответ 2
это просто. Шаги:
Удалить общее начало строки (c:\temp1\)
Подсчитайте количество каталогов первого пути (1 в вашем случае)
Замените их на..
Добавить второй путь
Ответ 3
Обновлено: поскольку конструктор теперь устарел, вы можете использовать:
Идея Кирка Уолла хороша, но вам нужно убедиться, что ваш путь не искажается (например, пробелы заменены на %20), сообщая Uri, чтобы он не уклонился от вашего пути:
var result = new Uri(file1, true)
.MakeRelativeUri(new Uri(file2, true))
.ToString()
.Replace("/", "\\");