Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TFileStream, Daten werden nicht geschrieben, warum? (https://www.delphipraxis.net/202325-tfilestream-daten-werden-nicht-geschrieben-warum.html)

DualCoreCpu 20. Okt 2019 17:46

TFileStream, Daten werden nicht geschrieben, warum?
 
Hallo,

ich habe ein Programm, wie das hier:

Delphi-Quellcode:
program fileaccess;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes;

type
  TStringRec = record
    rErstesFeld: ShortString;
    rZweitesFeld: ShortString;
    rDrittesFeld: ShortString;
  end;

var
  AFiler: TFileStream;
  ARec: TStringRec;

begin
  try
    { TODO -oUser -cConsole Main : Code hier einfügen }
    ARec.ErstesFeld := 'erster Inhalt';
    ARec.ZweitesFeld := 'zweiter Inhalt';
    ARec.DrittesFeld := 'dritter Inhalt';
    AFiler := TFileStream.Create('commands.def',fmCreate{ or fmShareDenyNone});
    //AFiler.Write(ARec,Sizeof(ARec)); auch das funktioniert nicht

    AFiler.Write(ARec.rErstesFeld,Length(ARec.rErstesFeld));
    AFiler.Write(ARec.rZweitesFeld,Length(ARec.rZweitesFeld));
    AFiler.Write(ARec.rDrittesFeld,Length(ARec.rDrittesFeld));

    AFiler.Free; //Ich dachte, vor der Freigabe würde der Filsstream seine Daten auf Platte schreiben.
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Leider wird nichts auf Festplatte geschrieben. Warum nicht? Auch mit Huge String funktioniert es nicht.

Ich verwende Delphi 10.3.2 Community Edition ohne Updates

p80286 20. Okt 2019 17:57

AW: TFileStream, Daten werden nicht geschrieben, warum?
 
Versuch esmal mit einem qualifizierten Dateinamen z.B. C:\temp\Testdaten\command.txt

Gruß
K-H

Uwe Raabe 20. Okt 2019 17:59

AW: TFileStream, Daten werden nicht geschrieben, warum?
 
Dein Code compiliert ja nicht einmal...

Uwe Raabe 20. Okt 2019 18:01

AW: TFileStream, Daten werden nicht geschrieben, warum?
 
Übrigens:
Delphi-Quellcode:
ARec.rErstesFeld
zeigt nicht auf das erste Zeichen des ShortStrings!

DualCoreCpu 20. Okt 2019 19:58

AW: TFileStream, Daten werden nicht geschrieben, warum?
 
Zitat:

Zitat von p80286 (Beitrag 1449981)
Versuch esmal mit einem qualifizierten Dateinamen z.B. C:\temp\Testdaten\command.txt

Gruß
K-H

Richtig, Danke! Das war die Ursache, warum die Datei nicht geschrieben wurde!:thumb:

@Uwe Raabe: Ja auch das: Ich muss write(Rec.rErstesFeld[1], length(rErstesFeld)) schreiben, sonst wird das Längenbyte mit geschrieben, was ich natürlich nicht will.

scrat1979 20. Okt 2019 20:12

AW: TFileStream, Daten werden nicht geschrieben, warum?
 
Delphi-Quellcode:

var
  AFiler: TFileStream;
  ARec: StringRec;
Müsste es nicht

Delphi-Quellcode:

var
  AFiler: TFileStream;
  ARec: TStringRec;
heißen?

DualCoreCpu 21. Okt 2019 11:35

AW: TFileStream, Daten werden nicht geschrieben, warum?
 
Zitat:

Zitat von scrat1979 (Beitrag 1449987)
Delphi-Quellcode:

var
  AFiler: TFileStream;
  ARec: StringRec;
Müsste es nicht

Delphi-Quellcode:

var
  AFiler: TFileStream;
  ARec: TStringRec;
heißen?

Auch wieder wahr, Danke, habe das soeben geändert.

Und danke auch für die Anregung, den ganzen Record zu schreiben, statt die einzelnen Felder.

.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz