![]() |
relativen -> absoluten Pfad (als Text) erzeugen
ich habe zwei strings, einmal das aktuelle verzeichnis, und einmal ein zielverzeichnis.
nun brauche ich eine funktion, die mir aus diesen zwei strings das zielverzeichnis berechnet. Gibt es da was fertiges? oder muß ich das selber machen? z.B.: Aktuelles Dir : c:\temp\Prog1\data\ Ziel dir : ..\..\Prog2\bin Ausgabe : c:\temp\Prog2\bin |
Re: relativen -> absoluten Pfad (als Text) erzeugen
Kannst Du die beiden Pfade nicht einfach hintereinandersetzen:
c:\temp\Prog1\data\..\..\Prog2\bin Sieht zwar komisch aus, aber meines Wissens funktioniert das. |
Re: relativen -> absoluten Pfad (als Text) erzeugen
hmmmm, stimmt könnte funktionieren ...
aber leider brauche ich den "richtigen" namen, da ich auch gucken muß, ob das File bereits schon gelesen wurde, und so kann es sein, das ich das selbe File vom selben platz mit unterschiedlichen Pfadangaben 2 oder mehrfach einlese ... |
Re: relativen -> absoluten Pfad (als Text) erzeugen
Du mußt den Pfad in einzelene Teile zerlegen und denn Zielpfad dann neu zusammensetzen.
|
Re: relativen -> absoluten Pfad (als Text) erzeugen
Also das hört sich doch schon sehr ähnlich an:
Zitat:
|
Re: relativen -> absoluten Pfad (als Text) erzeugen
Zitat:
(ExpandFileName, geht glaub ich immer auf den aktuellen Pfad, ich muß den Pfad angeben können) [edit]schade, ExpandFileName ruft direkt eine WinAPI Funktion auf, daher wirds wohl keine Sourcecode copy geben :( ich könnte zwar jedesmal SetCurrentDir setzen, und dann ExpandFileName verwenden, ist aber nicht wirklich schön |
Re: relativen -> absoluten Pfad (als Text) erzeugen
Hallo Hans,
warum kombinierst du nicht die beiden angebotenen (Teil-)Lösungen?
Delphi-Quellcode:
Gruß Hawkeye
var
s1, s2, Path : string; begin s1 := 'c:\temp\Prog1\data\'; s2 := '..\..\Prog2\bin'; Path := ExpandFileName(s1 + s2); end; |
Re: relativen -> absoluten Pfad (als Text) erzeugen
Zitat:
ja, danke funkt perfekt ... hab irgendwie zu komisch gedacht dabei ... |
Re: relativen -> absoluten Pfad (als Text) erzeugen
ich hab mir dafür mal folgende Funktion geschrieben:
Delphi-Quellcode:
function RelToAbsPath(ACurPath, ARelPath: String): String;
var lCopiedTo, lCount : Integer; lParts : TStringList; lStr : String; begin ARelPath := StringReplace(ARelPath, '/', '\', [rfReplaceAll]); ACurPath := StringReplace(ACurPath, '/', '\', [rfReplaceAll]); lParts := TStringList.Create(); if (copy(ARelPath, 1, 2) = '.\') or (copy(ARelPath, 1, 3) = '..\') then begin if (copy(ACurPath, Length(ACurPath), 1) = '\') then ARelPath := ACurPath + ARelPath else ARelPath := ACurPath + '\' + ARelPath; end; lCopiedto := 0; for lCount := 1 to Length(ARelPath) - 1 do begin if (ARelPath[lCount] = '\') then begin lStr := copy(ARelPath, lCopiedto + 1, lCount - lCopiedTo - 1); if (lStr <> '') then lParts.Add(lStr); lCopiedTo := lCount; end; end; lStr := copy(ARelPath, lCopiedTo + 1, Length(ARelPath)); if (lStr <> '') then lParts.Add(lStr); lCount := 0; while (lCount < lParts.Count) do begin if (lParts.Strings[lCount] = '.') then lParts.Delete(lCount) else if (lParts.Strings[lCount] = '..') then begin lParts.Delete(lCount); if (lCount > 1) then begin lParts.Delete(lCount - 1); dec(lCount); end; end else inc(lCount); end; lStr := ''; for lCount := 0 to lParts.Count - 2 do lStr := lStr + lParts.Strings[lCount] + '\'; if (lParts.Count > 0) then lStr := lStr + lParts.Strings[lParts.Count - 1]; lParts.Free; result := lStr; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz