![]() |
StreamToString
Ich steh grade ziehlich auf den Schlauch. Ich will einen Stream in einen String umwandeln. Doch folgende funktion gibt ein eigenartiges ergebnis aus. Was mache ich da falsch und welche ausgabe hat der Code bei euch ?
Delphi-Quellcode:
Was steht in der ShowMessage ???
function streamtostr(S: TStream): string;
var str: string; begin setlength(str, S.size); S.Read(str[1],length(str)); result:= str; end; procedure TForm1.Button1Click(Sender: TObject); var ms: tmemorystream; s: string; begin ms:= tmemorystream.Create; s := 'gsfdgfdghgfd'; ms.Write(s, length(s)); showmessage(streamtostr(ms)); end; |
Re: StreamToString
du musst die Streamposition wieder an den Anfang setzen bevor du daraus liest.
|
Re: StreamToString
So also ?
Delphi-Quellcode:
Jetzt erhalte zwar keinen dll namen aber aber auch noch nicht den text
function streamtostr(S: TStream): string;
var str: string; begin setlength(str, S.size); S.Position:=0; S.Read(str[1],length(str)); result:= str; end; |
Re: StreamToString
Erzeuge doch einen TStringStram, lade mit CopyFrom den QuellStream in den StringStream. Danach kannst du den String aus dem StringStream auslesen.
Florian |
Re: StreamToString
das liegt daran das du beim schreiben den Fehler gemacht hast den du beim lesen glücklicher Weise nicht gemacht hast. Mit
Delphi-Quellcode:
schreibst du nicht den String sondern die Adresse wo der String hinzeigt + die Variablen dahinter. Wenn dann so:
ms.Write(s, length(s));
Delphi-Quellcode:
war aber sicher nen Pflüchtigkeitsfehler.
ms.Write(s[1], length(s));
|
Re: StreamToString
Danke, meine güte bei stream mach ich wirklich alles falsch was auch nur geht :(
|
Re: StreamToString
Ausserdem schreibt er die Adresse des Strings und alles nachfolgende im RAM in den Stream anstatt dem String selber. Ausserdem gibt es doch den TStringStream.
Delphi-Quellcode:
/EDIT: rote Box???
function streamtostr(S: TStream): string;
var str: string; lStringStream: TStringStream; begin lStringStream := TStringStream.Create; Try lStringStream.CopyFrom(S, 0); Result := lStringStream.DataString; Finally lStringStream.Free; End; end; procedure TForm1.Button1Click(Sender: TObject); var ms: tmemorystream; s: string; begin ms:= tmemorystream.Create; try s := 'gsfdgfdghgfd'; ms.Write(s[1], length(s)); ms.Position := 0; showmessage(streamtostr(ms)); finally ms.Free; end; end; // Alternativ: procedure TForm1.Button2Click(Sender: TObject); var ms: tstream; s: string; begin ms := tstringstream.Create('gsfdgfdghgfd'); try ms.Position := 0; showmessage(streamtostr(ms)); finally ms.Free; end; end; |
Re: StreamToString
Zitat:
soll vielleicht so :
Delphi-Quellcode:
lStringStream := TStringStream.Create('');
|
Re: StreamToString
Aber eigentlich ist doch egal, wie alt der Thread ist.
|
Re: StreamToString
Zitat:
Es gibt viele Leute, die in Archiv suchen :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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