![]() |
TFileStream schreiben
Hallo,
ich möchte eine neue Datei bzw. einen neuen Dateiinhalt anlegen. Ich nutze fs:=TFileStream.Create('...', fmOpenWrite) und dann fs.Write(...). Ist die Datei (300Bytes) bereits vorhanden und ich schreibe 200Bytes, dann ist die Dateigröße nach fs.Free immer noch 300Bytes groß. Sie soll aber 200Bytes groß sein. Was habe ich nicht beachtet? Beste Grüße |
AW: TFileStream schreiben
Wenn du die Datei immer überschreiben willst, musst du
Delphi-Quellcode:
nehmen. Im Falle von
fmCreate
Delphi-Quellcode:
öffnest du die vorhandene Datei und fängst bei Position 0 an zu (über)schreiben.
fmOpenRead
|
AW: TFileStream schreiben
Und fmOpenWrite knallt auch, wenn die Datei vorher noch nicht existiert, denn sie lässt sich bekanntlich nicht so gut öffnen.
Einige FileAPIs bieten auch ein fmOpenNew an, was TRUNCATE_EXISTING ( ![]() Mir war so, als wenn TFileStream auch ![]() ![]() aber indirekt geht auch
Delphi-Quellcode:
, vor dem Schließen der Datei.
FS.Size := FS.Position;
|
AW: TFileStream schreiben
Ich dachte bisher immer, TFileStream.Position stünde auf TFileStream.Size nach dem .Create? Zur Sicherheit würde ich das so machen:
Delphi-Quellcode:
EDIT:
FS:= TFileStream.Create(fmCreate or fmOpenWrite)
FS.Seek(0, soFromEnd); // oder: FS.Position:= FS.Size; (keine Ahnung was schneller ist ^^) FS.Write(... Noch vergessen, den "Egositen-Modus"
Delphi-Quellcode:
damit hier auch nix schief geht ;-)
FS:= TFileStream.Create(fmCreate or fmOpenWrite or fmShareExclusive)
Noch'n EDIT: Grade gesehen, du willst ja nicht anhängen sondern ersetzen. Dann so:
Delphi-Quellcode:
FS:= TFileStream.Create(fmCreate or fmOpenWrite or fmShareExclusive);
FS.Size:= 0; FS.Write(... |
AW: TFileStream schreiben
Gelöscht
|
AW: TFileStream schreiben
Noch ein kleiner Tipp zu Streams.
Es ist sicherer, WriteBuffer sowie ReadBuffer statt Write und Read zu verwenden. Können aus irgedeinem Grund nicht die angegebenen Bytes geschrieben oder gelesen werden, so erhält man eine EWrite- oder EReadException. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz