Autor Beitrag
DiamondDog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Sa 22.11.08 10:33 
Hallo Leute,
also ich wollte mal Fragen wie ich es hinbekomme,
das wenn ich damit den Pfad anzeigen lasse:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 22.11.08 10:53 
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:
ausblenden 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

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 22.11.08 11:01 

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Sa 22.11.08 11:53 
Ok wie löse ich die Funktion dann per Buttonklick aus?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 22.11.08 11:57 
Öhm, wie jede andere auch, wie zum Beispiel ExtractFilePath o.ä., wo liegt das Problem?
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Sa 22.11.08 12:15 
Ok habs jetzt so versucht:
ausblenden 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.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 22.11.08 13:10 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Sa 22.11.08 13:19 
@ DeddyH das funktioniert super besten Dank.
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 22.11.08 13:20 
Das funktioniert schon, lass dir mal ausgeben
ausblenden 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));

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)