Handling von Pfad- und Filenamen
- 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
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
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
-
- 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
TPath und Konsorten wurden bisher noch nicht für FPC portiert.photor hat geschrieben: ↑Mi 12. Okt 2022, 19:38In 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).
FPC Compiler Entwickler
- 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
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
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
-
- 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
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;
- 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
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.h-elsner hat geschrieben: ↑Do 13. Okt 2022, 08:41Ich 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.
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
- 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
SChade. Das sah schon nicht schlecht aus. Aber dann brauche ich nicht weiter zu suchen.PascalDragon hat geschrieben: ↑Do 13. Okt 2022, 07:40TPath und Konsorten wurden bisher noch nicht für FPC portiert.
Ciao,
Photor
- 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
Ü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).