Peter: (oder andere Prog-Sprache) relativen Dateipfad ermitteln

Tach auch!

ich suche eine Methode, die mir aus einem Basispfad und einem Pfad den relativen Pfad zurückgibt - sprich: wie kann man den  Pfad als relativ zum Basispfad ausdrücken.

Beispiel:
Basispfad sei: c:\temp\foo
Pfad = c:\temp\foo\bar\bar.txt ==> .\bar\bar.txt (von mir aus auch ohne  .\ am Anfang)
Pfad = c:\temp\bar.txt ==> ..\bar.txt
Pfad = c:\bar.txt ==> ....\bar.txt
Pfad = d:\some\stuff\bar.txt ==> d:\some\stuff\bar.txt

also: unter Windows: bei gleichem Laufwerk: relativ, bei verschiedenem Laufwerk absoluten Pfad als Returnwert

unter Unix sollte eigentlich immer ein relativer Pfad zurückgegeben werden, da es ja keine Laufwerksbuchstaben gibt.

Gibt es sowas schon fertig?
Wenn ja, in welcher Klasse versteckt es sich?
Wenn nein - hat jemand sowas schon gebaut? (Sollte jemand sowas in ner anderen Sprache haben, würde mir das auch schon viel Arbeit sparen, wenn ich das nur noch nach Java übertragen müßte).
Sollte das noch niemand gemacht haben, bau ich notfalls selber was.

Wäre toll, wenn mir jemand helfen könnte!

Peter

  1. Hallo,
    Also ich hab sowas mal in Perl programmiert und es da so gemacht:
    Angenommen Du hast /temp/foo und willst auf /temp/other/bar.txt zugreifen.
    1.) Du zerlegst beide Pfade ahnand des "/".
    2.) Du vergleichst beide Pfaade Ebene für Ebende und merkst Dir die position, wo beide noch gleich sind:
    ->"/temp/" ->Poition 0.
    3.) Du gehst in "temp/foo" weiter und schreibst für jedes Verzeichnis was noch folgt in deinen Relativen Pfad ein "../", ganz am Anfang muss ein "./" stehen, damits auch mit Dateien funkt. die im selben verzeichnis liegen
    -> relativer pfad=  "./../"
    4.) Du gehst den zweiten Pfad von der in 1 gefundenen Position + 1 weiter, bis du zum ende kommst und übernimst jeden Verzeichnisnamen in deinen relativen Pfad:
    Position 1: "other/"
    ->relativer Pfad = "./../other/"
    Position 2: "bar.txt"
    ->relativer Pfad = "./../other/bar.txt"

    Für andere Laufwerke muesstest halt noch ne Erkennung machen, ob das Laufwerk identisch ist und falls nicht, nen absoluten Pfad hernehmen.

    Gruesse,
    Joerg