从完整路径获取相对路径

本文关键字:路径 获取 相对 | 更新日期: 2023-09-27 18:12:04

我必须从完整路径中获得不包括相对路径的路径,说

相对路径为C:'User'Documents'

fullpath, C: '用户文档' '测试' Folder2 ' test.pdf

我想只得到相对路径后的路径,即'Test'Folder2' Test .pdf

我怎样才能做到这一点。

我使用c#作为编程语言

从完整路径获取相对路径

你不是在谈论相对的,所以我将称之为部分路径。如果你能确定部分路径是你的完整路径的一部分,它是一个简单的字符串操作:

string fullPath = @"C:'User'Documents'Test'Folder2'test.pdf";
string partialPath = @"C:'User'Documents'";
string resultingPath = fullPath.Substring(partialPath.Length);

这需要一些错误检查-当fullPath或partialPath为空或两个路径的长度相同时,它将失败

嗯,但是如果情况不同呢?或者其中一个路径使用简短的文件夹名称?更完整的解决方案是……

public static string GetRelativePath(string fullPath, string containingFolder,
    bool mustBeInContainingFolder = false)
{
    var file = new Uri(fullPath);
    if (containingFolder[containingFolder.Length - 1] != Path.DirectorySeparatorChar)
        containingFolder += Path.DirectorySeparatorChar;
    var folder = new Uri(containingFolder); // Must end in a slash to indicate folder
    var relativePath =
        Uri.UnescapeDataString(
            folder.MakeRelativeUri(file)
                .ToString()
                .Replace('/', Path.DirectorySeparatorChar)
            );
    if (mustBeInContainingFolder && relativePath.IndexOf("..") == 0)
        return null;
    return relativePath;
}

要展开Jan的回答,您可以在string类(或者您想要的Path类)上创建一个扩展方法,例如:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static string GetPartialPath(this string fullPath, string partialPath)
        {
            return fullPath.Substring(partialPath.Length)
        }
    }   
}

然后使用:

using ExtensionMethods;
string resultingPath = string.GetPartialPath(partialPath);

我还没有测试过这个扩展方法是否有效,但它应该可以。