Wie erstelle ich einen absoluten Pfad relativ zu einem bestimmten Ordner?

Wie erstelle ich einen absoluten Pfad relativ zu einem bestimmten Ordner?

Ja, das ist ganz einfach, stellen Sie sich Ihre Pfade als URIs vor :

Uri fullPath = new Uri(@"C:\RootFolder\SubFolder\MoreSubFolder\LastFolder\SomeFile.txt", UriKind.Absolute);
Uri relRoot = new Uri(@"C:\RootFolder\SubFolder\", UriKind.Absolute);

string relPath = relRoot.MakeRelativeUri(fullPath).ToString();
// relPath == @"MoreSubFolder\LastFolder\SomeFile.txt"

In Ihrem Beispiel ist es einfach absPath.Substring(relativeTo.Length) .

Ein ausführlicheres Beispiel würde erfordern, ein paar Ebenen von relativeTo zurückzugehen , wie folgt:

"C:\RootFolder\SubFolder\MoreSubFolder\LastFolder\SomeFile.txt"
"C:\RootFolder\SubFolder\Sibling\Child\"

Der Algorithmus zum Erstellen eines relativen Pfads würde wie folgt aussehen:

  • Entfernen Sie das längste gemeinsame Präfix (in diesem Fall ist es "C:\RootFolder\SubFolder\" )
  • Zählen Sie die Anzahl der Ordner in relativeTo (in diesem Fall ist es 2:"Sibling\Child\" )
  • Fügen Sie ..\ ein für jeden verbleibenden Ordner
  • Mit dem Rest des absoluten Pfads nach dem Entfernen des Suffixes verketten

Das Endergebnis sieht so aus:

"..\..\MoreSubFolder\LastFolder\SomeFile.txt"