In den Home-Ordner speichern

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

In den Home-Ordner speichern

Beitrag von Mathias »

Wen ich folgende Datei speichern will, gibt es einen Laufzeitfehler. Wieso ?

Code: Alles auswählen

  Memo1.Lines.SaveToFile('~/test.txt'); 


Gebe ich aber zB. bei Lazarus bei speichern unter... '~/test.txt' ein, da wird es gefressen. Wieso ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 8519
Registriert: Mo 11. Sep 2006, 19:01

Re: In den Home-Ordner speichern

Beitrag von theo »

FPC/Lazarus ist keine Unix Shell. Mit ~ kann es nichts anfangen.
Nimm https://www.freepascal.org/docs-html/rt ... erdir.html

Bei "Speichern unter" dürfte es vom Widgetset abhängen, was damit passiert. Der Save Dialog ist ja nativ.

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

Re: In den Home-Ordner speichern

Beitrag von Mathias »

Danke

Ich habe einen kleinen Test geschrieben.

Code: Alles auswählen

var
  s: string;
begin
  if SaveDialog1.Execute then begin
    s := SaveDialog1.FileName;
    Caption := s;
    Memo1.Lines.SaveToFile(s);
  end;   

Da habe ich bei speichern "~/test.txt" eingegeben. Bei Caption erschien dann "/hone/tux/test.txt".
Somit wandelt der SaveDialog dies automatisch um.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Ich934
Lazarusforum e. V.
Beiträge: 155
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: In den Home-Ordner speichern

Beitrag von Ich934 »

Ja, weil der SaveDialog dir hier die Arbeit der Umschreibung abnimmt. Im ersten Beispiel hast du das aber nicht. Hier musst du selbst aktiv werden. Was übrigens im Zuge von Plattformunabhängigkeit nicht falsch ist die genannte Funktion zu verwenden.
Tipp für PostgreSQL: www.pg-forum.de

aro
Beiträge: 68
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 15.11 + Lazarus 1.6.2
CPU-Target: 64Bit

Re: In den Home-Ordner speichern

Beitrag von aro »

Dialoge wissen immer in welchem Pfad sie sich gerade befinden. Sie listen schließlich alle im Pfad vorhandenen Dateien auf.

FileName gibt immer den kompletten Dateinamen mit dem kompletten Pfad zurück. Und zwar im Klartext, ohne Rücksicht darauf, das manche Programme bestimmte Pfadnamen für eine bessere Übersicht anders darstellen.

Damit sollte das Öffnen oder Speichern immer problemlos funktionieren

PascalDragon
Beiträge: 125
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: In den Home-Ordner speichern

Beitrag von PascalDragon »

Mathias hat geschrieben:
Mi 11. Mär 2020, 16:49
Wen ich folgende Datei speichern will, gibt es einen Laufzeitfehler. Wieso ?

Code: Alles auswählen

  Memo1.Lines.SaveToFile('~/test.txt'); 
Gebe ich aber zB. bei Lazarus bei speichern unter... '~/test.txt' ein, da wird es gefressen. Wieso ?
Wie die anderen das bereits gesagt haben, wird das von der Shell bzw. dem Widgetset behandelt. Die Lowlevel Funktionen der C-Bibliothek bzw. die SysCall-Schnittstelle des Kernels behandeln das nicht (und die stecken letztlich hinter SaveToFile). Wenn du einen solchen Pfad erwartest, empfiehlt es sich ExpandFileName zu verwenden, die Funktion kümmert sich auch um das Homeverzeichnis.
FPC Compiler Entwickler

Antworten