![]() |
Einlesen von Werten bei TFilestream
:cyclops: Hallo, ich beschäftige mich seit einiger Zeit mir Streams. Ich wollte das mal ausprobieren, aber wenn ich versuche die 2.Zahl zu lesen, liefert das Programm mir immer nur den wert der ersten Zahl; Was mache ich falsch? :?:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var stream: tstream; zahl,zahl1: integer; begin stream:= tfilestream.Create('C:\test.hen', (fmcreate or fmOpenWrite)); zahl:= strtoint(edit1.Text); zahl1:= strtoint(edit1.Text)+1; try stream.Write(zahl,sizeof(zahl)); stream.Write(zahl1,sizeof(zahl1)); finally stream.free; end; end; procedure TForm1.Button2Click(Sender: TObject); var stream: tstream; zahl: integer; begin stream:= tfilestream.Create('c:\test.hen', fmopenread); try stream.read(zahl, sizeof(zahl)); finally stream.Free; end; label1.caption:= inttostr(zahl); end; procedure TForm1.Button3Click(Sender: TObject); var stream: tstream; begin stream:= tfilestream.Create('c:\test.hen', fmopenread); try stream.read(zahl1, sizeof(zahl1)); finally stream.Free; end; label2.caption:= inttostr(zahl1); end; |
Re: Einlesen von Werten bei TFilestream
Du musst den Datei- bzw. Stream zeiger auf die aktuelle Position setzen, das Read fängt immer beim Datei- bzw. Streambegin an also an der Position 0.
Code:
[oh]Seek, TFileStream.Seek, TStream.Seek[/oh]
procedure TForm1.Button3Click(Sender: TObject);
var Stream: TFileStream; Zahl, Zahl1: Integer; begin Stream:= TFileStream.Create('c:\test.dat', fmOpenRead); try [color=#ff0000][b]Stream.Seek[/b][/color](soFromBeginning, SizeOf(Zahl)); stream.Read(zahl1, SizeOf(zahl1)); finally Stream.Free; end; Label2.Caption:= IntToStr(zahl1); end; |
Re: Einlesen von Werten bei TFilestream
:thumb: Klappt, aber wie mache ich es dann bei 3 oder mehr Zahlen? :gruebel:
|
Re: Einlesen von Werten bei TFilestream
Hi.
Speichere zuerst die Anzahl der Zahlen, dann kannst du sie so einlesen:
Delphi-Quellcode:
Grüße vom marabu
uses
Types; procedure TForm1.Button3Click(Sender: TObject); var stream: TFileStream; anzahl: Integer; zahlen: TIntegerDynArray; begin stream := TFileStream.Create('c:\test.dat', fmOpenRead); try stream.Read(anzahl, SizeOf(anzahl)); SetLength(zahlen, anzahl); stream.Read(zahlen[0], SizeOf(Integer) * anzahl); finally Stream.Free; end; Label2.Caption := IntToStr(anzahl); end; |
Re: Einlesen von Werten bei TFilestream
Und wie lautet der Code zum schreiben dazu, denn beimir kommt da immer irgendeine expections meldung. :?:
|
Re: Einlesen von Werten bei TFilestream
Vielleicht so:
Delphi-Quellcode:
marabu
procedure TForm1.Button1Click(Sender: TObject);
var stream: tstream; i, zahl: integer; zahlen: TIntegerDynArray; begin SetLength(zahlen, 5); for i := Low(zahlen) to High(zahlen) do zahlen[i] := Random(1000); stream:= tfilestream.Create('C:\test.hen', (fmcreate or fmOpenWrite)); try zahl := Length(zahlen); stream.Write(zahl, sizeof(zahl)); stream.Write(zahlen[0], Length(zahlen) * SizeOf(Integer)); finally stream.free; end; end; |
Re: Einlesen von Werten bei TFilestream
So klappts prima! :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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-2025 by Thomas Breitkreuz