Parent Directory

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6964
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Parent Directory

Beitrag von Mathias »

Ich hole auf folgende Weise das ParentDirectory eines Verzeichnispfades.

Gibt es dafür etwas eleganteres oder gar eine fertige Funktion ?

Code: Alles auswählen

  function ParentPath(const Path: string): string;
  begin
    Result := ExtractFilePath(ExcludeTrailingPathDelimiter(Path));
    if Result = '' then begin
      Result := Path;
    end;
  end;

var
  //  s: string = '/Music/Disco/Boney M/';
  s: string = 'c:\Music\Disco\Boney M\';
begin
  WriteLn(s);
  s := ParentPath(s);
  WriteLn(s);
  s := ParentPath(s);
 // usw.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 283
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Parent Directory

Beitrag von h-elsner »

Ich würde den String mit split in ein StringArray schreiben und über Index auf die einzelnen Verzeichnisse zugreifen.
s.Split([pathdelim])[0] sollten dann root sein.

Mathias
Beiträge: 6964
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Parent Directory

Beitrag von Mathias »

s.Split([pathdelim])[0] sollten dann root sein.
Ist dies nicht ein wenig zu aufwendig, den ganzen String zu zerlegen um ihn nachher wieder zusammen zu bauen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5193
Registriert: Fr 8. Apr 2011, 09:01

Re: Parent Directory

Beitrag von wp_xyz »

h-elsner hat geschrieben: Fr 5. Jul 2024, 19:38 Ich würde den String mit split in ein StringArray schreiben und über Index auf die einzelnen Verzeichnisse zugreifen.
s.Split([pathdelim])[0] sollten dann root sein.
Achtung. In Windows würde dann für "c:\Windows" root als "c:" identifiziert. Und auch bei Linux mit "/home/user" wäre root ein Leerstring.

PascalDragon
Beiträge: 963
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Parent Directory

Beitrag von PascalDragon »

Mathias hat geschrieben: Fr 5. Jul 2024, 17:37 Gibt es dafür etwas eleganteres oder gar eine fertige Funktion ?
In 3.2.3 oder 3.3.1 kannst du in der Unit System.IOUtils die Klassenmethode TDirectory.GetParent nutzen. Oder alternativ kannst du dessen Implementierung auch selbst nutzen:

Code: Alles auswählen

ExpandFileName(IncludeTrailingPathDelimiter(aPath) + '..')
FPC Compiler Entwickler

Mathias
Beiträge: 6964
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Parent Directory

Beitrag von Mathias »

PascalDragon hat geschrieben: So 7. Jul 2024, 22:43
Mathias hat geschrieben: Fr 5. Jul 2024, 17:37 Gibt es dafür etwas eleganteres oder gar eine fertige Funktion ?
In 3.2.3 oder 3.3.1 kannst du in der Unit System.IOUtils die Klassenmethode TDirectory.GetParent nutzen. Oder alternativ kannst du dessen Implementierung auch selbst nutzen:

Code: Alles auswählen

ExpandFileName(IncludeTrailingPathDelimiter(aPath) + '..')
Danke, mit diesem Einzeiler gehts.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten