Zitat:
falls das nicht geht: wie kann ich dann einzelne string- oder integer-variablen üder den filestream speichern & laden?
hier mal ein Beispiel Record, den du speichern und laden willst:
Delphi-Quellcode:
type
PTestRecord = ^TTestRecord;
TTestRecord = record
TestID: Integer;
TestBoolean: Boolean;
Testname: String;
end;
TTestRecordArray = Array of TTestRecord;
var
fDeinArray: TTestRecordArray;
Funktion zum Laden:
Delphi-Quellcode:
function LoadList(const Value: String): Boolean;
var
FS: TFileStream;
I: Integer;
Len: LongInt;
begin
Result := FileExists(Value);
if not Result then
Exit;
FS := TFileStream.Create(Value, fmOpenRead);
try
FS.Read(Len, SizeOf(Len));
SetLength(fDeinArray, Len);
for I := 0 to Len - 1 do
with fDeinArray[I] do
begin
// TestID
FS.Read(TestID, SizeOf(Integer));
// TestBoolean
FS.Read(TestBoolan, SizeOf(Boolean));
// TestName
FS.Read(Len, SizeOf(Len));
SetLength(TestName, Len);
FS.Read(PChar(TestName)^, Len);
end;
finally
FS.Free;
end;
end;
Prozedur zum Speichern:
Delphi-Quellcode:
procedure SaveList(Value: String);
var
FS: TFileStream;
I: Integer;
Len: LongInt;
begin
try
FS := TFileStream.Create(Value, fmCreate);
except
// Fehler beim Speichern!
Exit;
end;
try
Len := Length(fDeinArray);
FS.Write(Len, SizeOf(Len));
for I := 0 to Length(fDeinArray) - 1 do
with fDeinArray[I] do
begin
// TestID
FS.Write(TestID, SizeOf(Integer));
// TestBoolean
FS.Write(TestBoolean, SizeOf(Boolean));
// TestName
Len := Length(TestName);
FS.Write(Len, SizeOf(Len));
FS.Write(PChar(TestName)^, Len);
end;
finally
FS.Free;
end;
end;
hoffe dass das so verständlich ist (und keine fehler enthält). Im Prinzip kannst du einfach via TFileStream.Read Werte lesen, via TFileStream.Write Werte schreiben. Wie du siehst gibt der 2. Parameter immer die Größe des Wertes an. Bei Strings vorher die Länge festsetzen.
edit: um bei der Funktion das korrekte Result zu erhalten, könntest du noch einen try..except Block drum herum bauen. Im o.g. Beispielcode wird das nur via FileExists überprüft.
edit2: ein paar fehler korrigiert (den code habe ich nicht getestet, sondern hier mal so reingetippt, hoffe dass es jetzt stimmt, das prinzip dürfte aber - denke ich - klar sein).