Подтвердить что ты не робот

Существует ли метод в С# для получения относительного пути, заданного двумя абсолютными входами пути?

Существует ли метод в С# для получения относительного пути, заданного двумя абсолютными входами пути?

То есть у меня будет два входа (с первой папкой в ​​качестве базы), например

c:\temp1\adam\

и

c:\temp1\jamie\

Тогда выход будет

..\jamie\
4b9b3361

Ответ 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

Обновлено: поскольку конструктор теперь устарел, вы можете использовать:

Uri.UnescapeDataString(new Uri(file1).MakeRelativeUri(new Uri(file2)).ToString())
  .Replace("/", "\\");

старая версия:

Идея Кирка Уолла хороша, но вам нужно убедиться, что ваш путь не искажается (например, пробелы заменены на %20), сообщая Uri, чтобы он не уклонился от вашего пути:

var result = new Uri(file1, true)
    .MakeRelativeUri(new Uri(file2, true))
    .ToString()
    .Replace("/", "\\");