绝对路径转相对路径

20
我正在从OpenFileDialog中获取一个文件,它返回一个带有所选文件的绝对路径的字符串。现在我想要将该路径作为给定路径(在这种情况下是我的应用程序路径)的相对路径。

假设我得到了一个文件路径: c:\myDock\programming\myProject\Properties\AssemblyInfo.cs

而我的应用程序位于

c:\myDock\programming\otherProject\bin\Debug\program.exe

那么我想要的结果是:

..\..\..\myProject\Properties\AssemblyInfo.cs


请查看我的回答:https://dev59.com/wHRB5IYBdhLWcg3wJkhC#23697173 - Ronnie Overby
1个回答

33

Uri类有一个MakeRelativeUri方法可以帮助。

public static string MakeRelative(string filePath, string referencePath)
{
    var fileUri = new Uri(filePath);
    var referenceUri = new Uri(referencePath);
    return Uri.UnescapeDataString(referenceUri.MakeRelativeUri(fileUri).ToString()).Replace('/', Path.DirectorySeparatorChar);
}

var result = MakeRelative(@"C:\dirName\dirName2\file.txt", @"C:\dirName\");

你说得完全正确,我正在编辑我的答案,就在你发表评论的时候 ;) - Sisyphe
没问题,我发布的链接对其他人也会有帮助。 - Mr_Green
谢谢链接编辑 ^^ - Sisyphe
4
从技术上讲,如果想要使用反斜杠作为路径分隔符,应该在 .ToString() 后面加上 .Replace('/', Path.DirectorySeparatorChar) - Nyerguds
这并不处理所有边缘情况。请参见答案。 - Muhammad Rehan Saeed
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接