AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein relativen -> absoluten Pfad (als Text) erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

relativen -> absoluten Pfad (als Text) erzeugen

Ein Thema von Gruber_Hans_12345 · begonnen am 19. Apr 2007 · letzter Beitrag vom 19. Apr 2007
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#1

relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 12:32
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
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#2

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 12:42
Kannst Du die beiden Pfade nicht einfach hintereinandersetzen:

c:\temp\Prog1\data\..\..\Prog2\bin

Sieht zwar komisch aus, aber meines Wissens funktioniert das.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#3

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 12:46
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 ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 12:48
Du mußt den Pfad in einzelene Teile zerlegen und denn Zielpfad dann neu zusammensetzen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 12:57
Also das hört sich doch schon sehr ähnlich an:
Zitat:
ExpandFileName Routine

Gibt den vollständigen Pfad eines relativen Dateinamens zurück.

Unit
SysUtils

Syntax


[Delphi] function ExpandFileName(const FileName: string): string;


Beschreibung
ExpandFileName konvertiert einen relativen Dateinamen in einen vollständigen Pfadnamen, indem dem Dateinamen das aktuelle Verzeichnis und das aktuelle Laufwerk hinzugefügt wird. ExpandFileName prüft nicht, ob der Rückgabewert auf eine existierende Datei verweist.
Hinweis:
ExpandFileName unterstützt nicht das UNC-Format. Verwenden Sie zur Erweiterung eines UNC-Dateinamens die Routine ExpandUNCFileName .
Oder ?
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#6

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 13:01
Zitat von jfheins:
Also das hört sich doch schon sehr ähnlich an: Oder ?
ja, aber leider nur so ähnlich, aber ich könnte mal den source von ExpandFileName angucken, vielleicht kann ich da das rausholen was ich brauche

(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
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 13:37
Hallo Hans,

warum kombinierst du nicht die beiden angebotenen (Teil-)Lösungen?

Delphi-Quellcode:
var
  s1, s2, Path : string;
begin
  s1 := 'c:\temp\Prog1\data\';
  s2 := '..\..\Prog2\bin';
  Path := ExpandFileName(s1 + s2);
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#8

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 13:40
Zitat von Hawkeye219:
Hallo Hans,

warum kombinierst du nicht die beiden angebotenen (Teil-)Lösungen?
ne, das wäre ja zu leicht

ja, danke funkt perfekt ... hab irgendwie zu komisch gedacht dabei ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: relativen -> absoluten Pfad (als Text) erzeugen

  Alt 19. Apr 2007, 13:42
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz