![]() |
Streams
Ich habe bisschen probs das mit den Streams ganz zu verstehen. Hat vielleicht jemand ne Read und Write Procedure, umd ein Array in ne Streamdatei zu schreiben? Eigentlich ganz simpel^^
Naja wenn sich keienr findet werde ich mich wohl oder überl noch nen paar stunden damit beschäftigen. Aber wäre wirklich klasse hier was zu bekommen. Thx. |
Re: Streams
Moin Quick Silver,
ein Beispiel:
Delphi-Quellcode:
var
fsWork : TFileStream; aiDemo : array [1..10] of integer; iIndex : integer; begin fsWork := TFileStream.Create('c:\temp\SaveArrayDemo.file',fmCreate or fmOpenWrite); try for iIndex := low(aiDemo) to high(aiDemo) do begin aiDemo[iIndex] := iIndex; // Nur damit auch was in der Datei steht fsWork.Write(aiDemo[iIndex],4); end; finally FreeAndNil(fsWork); end; end; |
Re: Streams
Kann mir jetzt noch einer etwas genauer die 4 Erläutern? Die steht doch für irgend ne läger oder ?!?
Und wie kommst du hier gerade auf 4? Edit: und ne passene Readfunktion dafür wäre hilfreich. |
Re: Streams
Zitat:
|
Re: Streams
Gut das schreiben habe ich jetzt glaube ich begriffen :) Und wie lese ich das ganze in eine variable aus der datei?
|
Re: Streams
Zitat:
hier mal eine Erweiterung des Beispieles von oben. Du brauchst auf der Form einen Button und eine Memo
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var fsWork : TFileStream; aiDemo : array [1..10] of integer; iIndex : integer; i_deineVariable : Integer; begin fsWork := TFileStream.Create('c:\temp\SaveArrayDemo.file',fmCreate or fmOpenWrite); try for iIndex := low(aiDemo) to high(aiDemo) do begin aiDemo[iIndex] := iIndex; // Nur damit auch was in der Datei steht fsWork.Write(aiDemo[iIndex],4); end; //Ab hier wird gelesen fsWork.Position := 0; //Den Stream auf die Anfangsposition setzen for iIndex := low(aiDemo) to high(aiDemo) do begin fsWork.Read(i_deineVariable,4); //Die nächsten 4 Byte aus dem Stream lesen Memo1.Lines.Add (IntToStr (i_deineVariable)); // Variable im Memo anzeigen end; finally FreeAndNil(fsWork); end; end; |
Re: Streams
Hier ist ein
![]() |
Re: Streams
Also weiter. Ich habe das Prinzip jetzt gerallt :) Aber beim asulesen kommt noch was falsches zurück.
Delphi-Quellcode:
Aber in den Edits steht hinter den eigentlich inhalten iemr noch ein zeichen doer sie sind unvollständig... Testet es selber. Nachher schicke ich noch ein screen vielleich. Geht jetzt nicht bin in der Schule.type TConnection=record user,pass,host:string; port:integer; auth:boolean; end; //speichern: procedure TFormMain.Button1Click(Sender: TObject); var Stream: TStream; begin Connect_info.user:=edit7.text; Connect_info.pass:=edit8.text; Connect_info.host:=edit9.text; Connect_info.port:=strtoint(edit10.text); Connect_info.auth:=CheckBox1.enabled; Stream := TFileStream.Create('h:\Connection.info', fmCreate or fmOpenWrite); try Stream.Write(Connect_info.user, SizeOf(Connect_info.user)+10); Stream.Write(Connect_info.pass, SizeOf(Connect_info.pass)+10); Stream.Write(Connect_info.host, SizeOf(Connect_info.host)+10); Stream.Write(Connect_info.port, SizeOf(Connect_info.port)+10); Stream.Write(Connect_info.auth, SizeOf(Connect_info.auth)+10); finally Stream.Free; end; //edits leeren und variablen verfälschen. Mache ich nur formal, damit man sieht wenn es NICHT klappt :) edit7.text:=''; edit8.text:=''; edit9.text:=''; edit10.text:=''; Connect_info.user:='XX'; Connect_info.pass:='XX'; Connect_info.host:='XX'; Connect_info.port:=666; Connect_info.auth:=false; end; //laden: procedure TFormMain.Button2Click(Sender: TObject); var Stream: TStream; begin Stream := TFileStream.Create('h:\Connection.info', fmOpenRead); try Stream.Position:=0; //<-- überflüssig hier Stream.Read(Connect_info.user, SizeOf(Connect_info.user)+10); Stream.Read(Connect_info.pass, SizeOf(Connect_info.pass)+10); Stream.Read(Connect_info.host, SizeOf(Connect_info.host)+10); Stream.Read(Connect_info.port, SizeOf(Connect_info.port)+10); Stream.Read(Connect_info.auth, SizeOf(Connect_info.auth)+10); finally Stream.Free; end; //Variablen in edits ausgeben edit7.text:=Connect_info.user; edit8.text:=Connect_info.pass; edit9.text:=Connect_info.host; edit10.text:=inttostr(Connect_info.port); edit2.text:=inttostr(SizeOf(Connect_info.user)); end; |
Re: Streams
Moin Quick Silver,
Dein Problem steckt in dieser Zeile:
Delphi-Quellcode:
String ist nur ein Pointer auf den Inhalt des Wertes, es wird also, unabhängig davon, was in den Feldern steht, immer nur der Pointer auf den String in den Stream geschrieben.
user,pass,host:string;
Probier mal string durch array of char zu ersetzen, oder ggf. auch ShortStrings.
Delphi-Quellcode:
20 ist natürlich nur ein Beispiel.
user, pass, host: array [1..20] of char;
// oder user, pass,host: String[20]; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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