Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Variable Records speichern

  Alt 15. Jan 2009, 14:48
Das wird so nicht funktionieren. Es werden nur die Pointer auf die Stringdaten in der Datei gespeichert, wovon man nichts hat.

Ich würds mit nem FileStream machen:

Delphi-Quellcode:
type
  TCDArchiv = record
  Album, Titel, Songs:String;

interface

procedure Save(x: TCDArchiv; Filename: String);
var fs: TFileStream;
     l: Integer;
begin
  fs := TFilestream.Create(Filename,fmCreate);
  try
    l := Length(x.Album);
    fs.Write(l,SizeOf(Integer));
    fs.Write(x.Album[1],l);
    
    l := Length(x.Titel);
    fs.Write(l,SizeOf(Integer));
    fs.Write(x.Titel[1],l);
    
    l := Length(x.Songs);
    fs.Write(l,SizeOf(Integer));
    fs.Write(x.Songs[1],l);
  finally
    fs.Free;
  end;
end;

function Load(Filename: String): TCDArchiv;
var fs: TFileStream;
     l: Integer;
begin
  fs := TFilestream.Create(Filename,fmOpenRead);
  try
    fs.Read(l,SizeOf(Integer);
    SetLength(Result.Album,l);
    fs.Read(Result.Album[1],l);

    fs.Read(l,SizeOf(Integer);
    SetLength(Result.Titel,l);
    fs.Read(Result.Titel[1],l);
    
    fs.Read(l,SizeOf(Integer);
    SetLength(Result.Songs,l);
    fs.Read(Result.Songs[1],l);
  finally
    fs.Free;
  end;
end;
Sollte so funktionieren

Edit: Code korrigiert
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat