Ответ 1
Не уверен, есть ли лучший способ, но это будет работать:
var file1 = @"c:\temp1\adam\";
var file2 = @"c:\temp1\jamie\";
var result = new Uri(file1)
.MakeRelativeUri(new Uri(file2))
.ToString()
.Replace("/", "\\");
Существует ли метод в С# для получения относительного пути, заданного двумя абсолютными входами пути?
То есть у меня будет два входа (с первой папкой в качестве базы), например
c:\temp1\adam\
и
c:\temp1\jamie\
Тогда выход будет
..\jamie\
Не уверен, есть ли лучший способ, но это будет работать:
var file1 = @"c:\temp1\adam\";
var file2 = @"c:\temp1\jamie\";
var result = new Uri(file1)
.MakeRelativeUri(new Uri(file2))
.ToString()
.Replace("/", "\\");
это просто. Шаги:
c:\temp1\
)Обновлено: поскольку конструктор теперь устарел, вы можете использовать:
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("/", "\\");