Тъй като .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);
}
Тази версия изглежда работи, но ме кара да се чувствам малко недоумяващ: няма ли валидни пътеки към локалната файлова система, които това безвъзмездно освобождаване може да повреди?
Свързано: Как да получите относителен път от absolute path Отговорите на този въпрос изобщо не засягат проблема с необичайните герои и бягството и като такива не отговарят на този въпрос.
PathRelativePathTo()
- person David Heffernan   schedule 05.06.2011PathRelativePathTo
не засяга файловата система, доколкото ми е известно. Това е чисто текстово. Ако искате да знаете как се прилага, винаги можете да погледнете изходния код на Wine! - person David Heffernan   schedule 05.06.2011