Einzelnen Beitrag anzeigen

Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Record als Datei speichern

  Alt 27. Mai 2020, 20:53
Hallo

persönlich wäre ich immer dafür, die Daten einzeln zu schreiben. Mit Filestream und TReader und Writer geht das ganz gut und einfach. Da hast du für jeden Datentypen schon ne Methode und brauchst dich um viele Dinge nicht zu kümmern. Ich finde das auch sehr verständlich und einfach lesbar.

Delphi-Quellcode:
var FS:TFileStream;
    Writer:TWriter;
begin
  fs:=TFileStream.Create(PfadDateiName,fmCreate);
  try
    Writer:=TWriter.Create(fs,const_BufferGroesse);
    try
      //Version schreiben
      Writer.WriteInteger(const_Version_aktuell);

      //Datenschreiben
      Writer.WriteString(s);
      Writer.WriteInteger(i);
      Writer.WriteDate(Datum);

    finally
      writer.Free;
    end;
  finally
    fs.free;
  end;
end;
laden:
Delphi-Quellcode:
var FS:TFileStream;
    Reader:TReader;
    Version:integer;
begin
  if FileExists(PfadDateiName) then
    begin
      fs:=TFileStream.Create(PfadDateiName,fmOpenRead);
      try
        Reader:=TReader.Create(fs,const_BufferGroesse);
        try
          Version:=Reader.ReadInteger;

          if Version=... then
            ...

        finally
          Reader.Free;
        end;
      finally
        fs.free;
      end;
    end;
end;
Wenn du eine Liste speicherst, dann halt zuerst die Anzahl und dann per Schleife die Daten.

Ich schreib als erstes immer eine Version mit rein. Beim auslesen kannst du die dann auswerten und so auch das laden "älterer DateiVersionen" unterstützen oder laden "neuerer Versionen" blocken. Wenn du mal doch dein record änderst haste auch weniger Probleme.

und ich würde es nicht als record machen, gleich als Klasse mit Savetostream oder savetofilemethoden.

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat