Получение относительного пути из полного пути - PullRequest
6 голосов
/ 20 октября 2011

Я должен получить путь, исключая относительный путь из полного пути, скажем

Относительный путь: C: \ User \ Documents \

полный путь, C: \ User \ Documents \ Test \ Folder2 \ test.pdf

Я хочу получить только путь после относительного пути, т.е. \ Test \ Folder2 \ test.pdf

как мне этого добиться.

Я использую C # в качестве языка программирования

Ответы [ 3 ]

5 голосов
/ 20 октября 2011

Вы не говорите об относительном, поэтому я назову его частичным путем. Если вы можете быть уверены, что частичный путь является частью вашего полного пути, это простая манипуляция строк:

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

Это требует некоторой проверки на наличие ошибок - она ​​потерпит неудачу, если либо fullPath, или partPath имеет значение null, либо оба пути имеют одинаковую длину.

2 голосов
/ 12 августа 2013

Хмммм, а что, если дело обстоит иначе?Или один из путей использует короткие имена для своих папок?Более полное решение было бы ...

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;
}
0 голосов
/ 20 октября 2011

Чтобы расширить ответ Яна, вы можете создать метод расширения для класса 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);

Я не проверял, работает ли этот метод расширения, но он должен делать .

...