Entwickler-Ecke

Sonstiges (Delphi) - ExtractFilePath einen Ordner zurück springen?


DiamondDog - Sa 22.11.08 10:33
Titel: ExtractFilePath einen Ordner zurück springen?
Hallo Leute,
also ich wollte mal Fragen wie ich es hinbekomme,
das wenn ich damit den Pfad anzeigen lasse:

Delphi-Quelltext
1:
ExtractFilePath(Application.ExeName);                    
dabei dann einen Ordner zurück zu gehen?
Beispiel:
Normal
(C:\Dokumente und Einstellungen\Test1\Test2)

Sollte dann so aussehen:
(C:\Dokumente und Einstellungen\Test1)

Danke schon mal fürs Helfen.

Mfg Dog


Xion - Sa 22.11.08 10:53
Titel: Re: ExtractFilePath einen Ordner zurück springen?
user profile iconDiamondDog hat folgendes geschrieben Zum zitierten Posting springen:

Normal
(C:\Dokumente und Einstellungen\Test1\Test2)

Sollte dann so aussehen:
(C:\Dokumente und Einstellungen\Test1)

wenn ich mich nicht total irre ist es normal
(C:\Dokumente und Einstellungen\Test1\Test2\)

das geht ganz einfach mit den String-Funktionen:

Delphi-Quelltext
1:
2:
S:=Copy(S,1,Length(S)-1); //den letzten Backslash löschen
S:=Copy(S,1,Pos('\',S)); //vom Anfang bis zum letzten Backslash kopieren


Blackheart666 - Sa 22.11.08 11:01

http://www.delphi-treff.de/tipps/dateienverzeichnisse/wiki/%C3%9Cbergeordnetes%20Verzeichnis%20ermitteln/


DiamondDog - Sa 22.11.08 11:38

@ Xion
Das löschen vom Backslash funktioniert.Aber das er alles biß zum letzen Backslash dann kopiert, das funktioniert leider nicht.
Er zeigt dann nur an C:\


jaenicke - Sa 22.11.08 11:43

Kein Wunder, er kopiert ja nur bis zum ersten Backslash, nicht bis zum letzten, denn Pos gibt den ersten zurück, schau dir mal den Link an, das sollte gehen.


DiamondDog - Sa 22.11.08 11:53

Ok wie löse ich die Funktion dann per Buttonklick aus?


jaenicke - Sa 22.11.08 11:57

Öhm, wie jede andere auch, wie zum Beispiel ExtractFilePath o.ä., wo liegt das Problem?

Delphi-Quelltext
1:
GetPreviousDirectory(ExtractFilePath(...                    
Ggf. musst du auch noch ExcludeTrailingPathDelimiter benutzen um sicherzustellen, dass am Ende kein Backslash steht, wenn das bei deinen Pfaden der Fall sein kann.


DiamondDog - Sa 22.11.08 12:15

Ok habs jetzt so versucht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function GetPreviousDirectory(const APath: string): string;
var
  i: Integer;
begin
  Result:=APath;
  i:=Length(APath);
  if i>3 then
  begin
    repeat
      Dec(i);
    until (APath[i] = '\'or (i=1);
    if APath[i]='\' then
      Result:=Copy(APath,1,i);
  end;
  ShowMessage(APath);
end;

procedure TForm1.Button1Click(Sender: TObject);
var APath : string;
begin
  APath := ExtractFilePath(Application.ExeName);
  ShowMessage(APath);
  if APath[Length (APath)] <> '\' then
    begin
      APath := Copy(APath,1,Length(APath)-1); //den letzten Backslash löschen
      ShowMessage(APath);
    end;
  GetPreviousDirectory(APath);
end;
Problem dabei ist:
Er erkennt den Backslash am Ende nicht und deswegen wird dieser auch nicht gelöscht.

Edit:
Das Problem mit dem \ am Ende hab ich gelöst.
Habe <> durch = erstezt.
Jetzt hab ich aber das Problem das die function nicht das macht was sie soll. Das heist si bekommt den Pafd ohne \ an Ende aber sie löscht den letzten Ordner nicht.


Delete - Sa 22.11.08 13:10


Delphi-Quelltext
1:
ExcludeTrailingPathDelimiter(ExtractFilePath(ExcludeTrailingPathDelimiter('C:\Dokumente und Einstellungen\Test1\Test2\')))                    

Der Code sieht zwar komisch aus, aber ich bekomme das gewünschte Ergebnis ;)


DiamondDog - Sa 22.11.08 13:19

@ DeddyH das funktioniert super besten Dank.


Blackheart666 - Sa 22.11.08 13:20

Das funktioniert schon, lass dir mal ausgeben

Delphi-Quelltext
1:
2:
3:
4:
5:
...
Path := Copy(APath,1,Length(APath)-1); //den letzten Backslash löschen
      ShowMessage(APath);
    end;
  ShowMessage(GetPreviousDirectory(APath));