Поскольку .NET не включает API для создания относительных путей, вместо этого я использовал метод MakeRelativeUri
Uri.Это работает, но я столкнулся с несколькими случаями, в которых это не так из-за того, что Uri сбежал.Так что я исправил это тоже:
public static string MakeRelativePath(string basePath, string tgtPath) {
return
Uri.UnescapeDataString(
new Uri(basePath, UriKind.Absolute)
.MakeRelativeUri(new Uri(tgtPath, UriKind.Absolute))
.ToString()
).Replace('/', Path.DirectorySeparatorChar);
}
Эта версия , кажется, работает, но это заставляет меня чувствовать себя немного странно: нет ли действительных путей локальной файловой системы, что этобеспричинное эскейпинг может привести к повреждению?
Похожие: Как получить относительный путь по абсолютному пути Ответы на этот вопрос не касаются вопроса о необычных символах и вообще не имеют выходаи поэтому не отвечайте на этот вопрос.