Handling von Pfad- und Filenamen

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Handling von Pfad- und Filenamen

Beitrag von photor »

Hallo Forum,

im momentanen Projekt gibt es mehrere Pfade und Directories - teilweise verschachtelt, mit einem Basisverzeichnis für ein Projekt, Unterverzeichnissen für Daten etc. Kurz, es werden viele Datei- und Verzeichnisnamen generiert, in einer INI gespeichert oder von dort gelesen.

Bisher handle ich diese Namen alle mit den üblichen Hausmitteln: Strings, ergänzt um die ein paar Funktionen, wie ExtractFilePath(INIFile_Dialog.FileName), ExtractFileName(INIFile_Dialog.FileName); oder dann, um die Konfiguration im INI-File zu speichern SaveINI(Directory+Filename,MyProjectData);. Aber ist das der Weisheit letzter Schluss?

In einem/dem deutschen Delphi-Forum habe ich in dem Zusammenhang gelesen, dass "man Pfade ja sowieso mit TPath.Combine" zusammen gebaut werden (siehe oben: einfaches String-Aneinanderhängen mit "+"; Aber dabei verhedder ich mich immer mal mit den Pfad-Trenner).

Bei der Suche, nach etwas ähnlichen in Lazarus/FPC habe ich jetzt nichts gefunden. Überhaupt scheint es nicht viel in diesem Zusammenhang zu geben und es scheinen wirklich nur die üblichen String-Werkzeuge zu bleiben; was spezifisches für Pfade, relativ oder absolute, Windows- oder Unix-Syntax etc, finde ich nicht. Oder habe ich nur geschickt genug dran vorbei gesucht.

Deshalb dachte ich, ich frage hier mal nach. Es geht mir nicht so sehr um Handling der Files selbst, sondern um die Namen und Pfade (idealerweise sowohl für Lazarus und Delphi gültig).

Dankbar für Hinweise,
Photor

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: Handling von Pfad- und Filenamen

Beitrag von TBug »

Hallo photor
photor hat geschrieben:
Mi 12. Okt 2022, 19:38
was spezifisches für Pfade, relativ oder absolute, Windows- oder Unix-Syntax etc, finde ich nicht. Oder habe ich nur geschickt genug dran vorbei gesucht.
Schau Dir einmal die Dateien FileUtil, FileCtrl und vor allem LazFileUtils an.
.

PascalDragon
Beiträge: 825
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: Handling von Pfad- und Filenamen

Beitrag von PascalDragon »

photor hat geschrieben:
Mi 12. Okt 2022, 19:38
In einem/dem deutschen Delphi-Forum habe ich in dem Zusammenhang gelesen, dass "man Pfade ja sowieso mit TPath.Combine" zusammen gebaut werden (siehe oben: einfaches String-Aneinanderhängen mit "+"; Aber dabei verhedder ich mich immer mal mit den Pfad-Trenner).
TPath und Konsorten wurden bisher noch nicht für FPC portiert.
FPC Compiler Entwickler

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
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: Handling von Pfad- und Filenamen

Beitrag von h-elsner »

Ich kenne auch nichts spezielles. Pfade baue ich meist mit IncludeTrailingPathDelimiter(pfad) zusammen, wenn ich nicht 100% sicher bin, dass der Path Delimiter nicht schon da ist.
Ansonsten Pfade mit pfad1+PathDelim+Pfad2 zusammen bauen, um plattformunabhängig zu sein. Aber so etwas eben nur, wenn ich sicher bin, wie der Pfadname aussieht.

Weiterhin gibt es ja, wie oben schon gesagt, eine Reihe nützlicher Funktionen für dateinamen und Pfade, wie zum Beispiel ChangeFileExt() usw.

Gruß HE

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Handling von Pfad- und Filenamen

Beitrag von Warf »

Ich hatte mal einen TPath typen gebaut der Operatoren unterstützt: https://github.com/Warfley/ObjPasUtils/ ... rc/pathlib

Code: Alles auswählen

var
  baseDir: TPath;
begin
  baseDir := 'Pfad/Zum/Basisordner';
  ...
  // Datei laden
  sl: TStringList.Create;
  try
    sl.LoadFromFile(basedir/'Filename.txt');
  finally
    sl.Free;
  end;
end;

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Handling von Pfad- und Filenamen

Beitrag von photor »

h-elsner hat geschrieben:
Do 13. Okt 2022, 08:41
Ich kenne auch nichts spezielles. Pfade baue ich meist mit IncludeTrailingPathDelimiter(pfad) zusammen, wenn ich nicht 100% sicher bin, dass der Path Delimiter nicht schon da ist.
Ansonsten Pfade mit pfad1+PathDelim+Pfad2 zusammen bauen, um plattformunabhängig zu sein. Aber so etwas eben nur, wenn ich sicher bin, wie der Pfadname aussieht.

Weiterhin gibt es ja, wie oben schon gesagt, eine Reihe nützlicher Funktionen für dateinamen und Pfade, wie zum Beispiel ChangeFileExt() usw.
Naja. Im Prinzip mache ich das jetzt ja auch so. Ist halt nur so aufwändig, wenn man eigentlich alle File-Operationen mit absoluten Pfaden machen will, für die Anzeige aber lieber relative Pfade verwenden würde.

Beim Zusammenbauen mittels pfad1+PathDelim+Pfad2 hilft IncludeTrailingPathDelimiter natürlich, um halbwegs Ordnung zu halten. Ich wunderte mich halt, dass es noch nichts besseres gibt.

Ciao,
Photor

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Handling von Pfad- und Filenamen

Beitrag von photor »

PascalDragon hat geschrieben:
Do 13. Okt 2022, 07:40
TPath und Konsorten wurden bisher noch nicht für FPC portiert.
SChade. Das sah schon nicht schlecht aus. Aber dann brauche ich nicht weiter zu suchen.

Ciao,
Photor

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Handling von Pfad- und Filenamen

Beitrag von photor »

TBug hat geschrieben:
Mi 12. Okt 2022, 20:42
Schau Dir einmal die Dateien FileUtil, FileCtrl und vor allem LazFileUtils an.
Über die entsprechenden Seiten bin ich schon gestolpert und die Funktionen versuche ich auch zu nutzen.

Aber du hast recht, ich könnte mir einfach den Source-Code ansehen, um ein paar Anregungen zu bekommen.

Dank an alle, die hier Input geliefert haben. Mal sehen, was ich daraus machen kann.

Ciao,
Photor


Edit: LazFileUtils bietet tatsächlich einiges mehr als die beiden anderen; ist natürlich nicht so Delphi-kompatibel (muss mal sehen, wie ich das am geschicktesten handle).

Antworten