Einzelnen Beitrag anzeigen

Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#1

AbsoluterPfad zu Relativen Pfad

  Alt 29. Nov 2010, 16:00
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;
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat