Announcement

Collapse
No announcement yet.

Anwendung von TFileStream

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Anwendung von TFileStream

    Hallo,

    ich verwende schon seit einiger Zeit TFileStream zum Speichern von Daten auf Festplatte und war kürzlich sehr erstaunt, als ich bemerken musste, dass bestimmte Daten "nicht" gespeichert wurden, obwohl ich lange der Meinung war, dass die Routine korrekt arbeitet.

    Seither ist die Welt für mich nicht mehr in Ordnung.

    Beispiel:

    var RWFile:TFileStream;

    Procedure Speichern;<br>
    begin<br>
    ...<br>
    if FileExists(FileName) then RWFile := TFileStream.Create(FileName, fmOpenWrite or fmShareExclusive)<br>
    else RWFile := TFileStream.Create(FileName, fmCreate);

    RWFile.WriteBuffer( BufferVar, VarSize );<br>
    ...<br>
    end;

    Procedure Lesen;<br>
    begin<br>
    ...<br>
    RWFile := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);

    RWFile.ReadBuffer( BufferVar, VarSize );<br>
    ...<br>
    end;

    Schliessen der Datei:

    finally<br>
    FreeAndNil(RWFile);<br>
    end;

    Ich habe nun die Vermutung, dass das Schliessen der Datei mit Free nicht korrekt ist. Leider ist in der Hilfe von Delphi 5 darüber nichts erwähnt.

    Mache ich etwas falsch ?

    Helmut

  • #2
    Hallo Helmut,<br>was für Daten speicherst Du denn in BufferVar. Vielleicht einen String? Strings schreibe ich wie folgt in einen Stream:<br>
    aInteger:=Length(aString); // Wie lang ist der String ?<br>
    F.WriteBuffer(aInteger,SizeOf(Integer)); // Schreibe die Länge in den Stream <br>
    F.WriteBuffer(Pointer(aString)^,aInteger); // Schreibe den String<br><br>So wird der String dann wieder gelesen:<br>
    F.ReadBuffer(aInteger,SizeOf(Integer)); // Lese die Länge aus dem Stream<br>
    SetLength(aString,aInteger);// Setze die Länge des Strings<br>
    F.ReadBuffer(Pointer(aString)^,aInteger); // Lese den String aus dem Stream<br><br>:-) Jens Schuman

    Comment

    Working...
    X