从完整路径获取相对路径

时间:2011-10-20 11:04:24

标签: c# path relative absolute

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

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

fullpath, C:\ User \ Documents \ Test \ Folder2 \ test.pdf

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

我怎样才能实现这一点。

我使用C#作为编程语言

3 个答案:

答案 0 :(得分:5)

你不是在谈论亲戚,所以我称之为部分路径。 如果你可以确定部分路径是完整路径的一部分,那么就是一个简单的字符串操作:

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

这需要进行一些错误检查 - 当fullPath或partialPath为null或两个路径都具有相同的长度时,它将失败。

答案 1 :(得分:2)

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

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;
}

答案 2 :(得分:0)

要扩展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);

我没有测试过这种扩展方法是否有效,但它是should do