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?
DiamondDog hat folgendes geschrieben : |
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); S:=Copy(S,1,Pos('\',S)); |
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); 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); ShowMessage(APath); end; ShowMessage(GetPreviousDirectory(APath)); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!