小编典典

获取相对于当前工作目录的路径?

c#

我正在编写一个控制台实用程序,以对命令行上指定的文件进行一些处理,但是遇到了无法通过Google / Stack
Overflow解决的问题。如果指定了完整路径(包括驱动器号),如何重新格式化该路径以使其相对于当前工作目录?

一定有类似于VirtualPathUtility.MakeRelative函数的东西,但是如果有的话,那使我难以理解。


阅读 332

收藏
2020-05-19

共1个答案

小编典典

如果您不介意斜杠被切换,则可以[ab]使用Uri

Uri file = new Uri(@"c:\foo\bar\blop\blap.txt");
// Must end in a slash to indicate folder
Uri folder = new Uri(@"c:\foo\bar\");
string relativePath = 
Uri.UnescapeDataString(
    folder.MakeRelativeUri(file)
        .ToString()
        .Replace('/', Path.DirectorySeparatorChar)
    );

作为功​​能/方法:

string GetRelativePath(string filespec, string folder)
{
    Uri pathUri = new Uri(filespec);
    // Folders must end in a slash
    if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString()))
    {
        folder += Path.DirectorySeparatorChar;
    }
    Uri folderUri = new Uri(folder);
    return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar));
}
2020-05-19