Hallo, ich muss einen absoluten Pfad in einen relativen umwandeln. Ich habe nichts nützliches gefunden.
Daher habe ich mir selbst eine Funktion gebaut:
Habe ich auf etwas vergessen?
Oder geht das ganze einfacher?
Delphi-Quellcode:
function GetRelativeFilename(pCurrentDirectory, pAbsoluteFilename: String): String;
var
iLen1, iLen2, iMinLen, iCount: Integer;
sResult, sPfad1, sPfad2, sTemp1, sFile: string;
begin
Result := pAbsoluteFilename;
sPfad1 := AnsiLowerCase(ExtractFilePath(pCurrentDirectory));
sPfad2 := AnsiLowerCase(ExtractFilePath(pAbsoluteFilename));
sFile := AnsiLowerCase(ExtractFileName(pAbsoluteFilename));
{ Bin ich im gleichen Verzeichnis }
if Copy(sPfad1, 1, 3) <> Copy(sPfad2, 1, 3) then
Exit;
{ Zuerst die gemeinsamen angaben entfernen}
iLen1 := Length(sPfad1);
iLen2 := Length(sPfad2);
iMinLen := iLen1;
if iLen2 < iMinLen then
iMinLen := iLen2;
sTemp1 := '';
for iCount := 1 to iMinLen do
begin
if sPfad1[iCount] = sPfad2[iCount] then
sTemp1 := sTemp1 + sPfad1[iCount]
else
Break;
end;
sPfad1 := StringReplace(sPfad1, sTemp1, '', [rfReplaceAll]);
sPfad2 := StringReplace(sPfad2, sTemp1, '', [rfReplaceAll]);
sTemp1 := '';
if sPfad1 <> '' then
begin
for iCount := 1 to Length(sPfad1) do
begin
if sPfad1[iCount] = '\' then
sTemp1 := sTemp1 + '..\';
end;
end;
sResult := sTemp1 + sPfad2 + sFile;
Result := sResult;
end;