Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 01.02.04 12:38 
Hi,

ich plage mich seit geraumer Zeit damit, einen String in einen FileStream zu schreiben; meine Frage: wie kann ich eine Zeichenkette beliebiger Länge in einen FileStream schreiben bzw. wieder auslesen? Gelingt mir irgendwie nicht - egal, was ich versuche.

AXMD
mirage228
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 338

Win 7 Prof.
Delphi 2005 Prof., Delphi 2010 Prof.
BeitragVerfasst: So 01.02.04 13:24 
Da habe ich was für dich:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
uses
  Classes;

//...

function ReadStringFromStream(F: TStream): String;
var
   aStrLen : Integer;
begin
  F.ReadBuffer(aStrLen,SizeOf(Integer));
  SetLength(Result,aStrLen);
  F.ReadBuffer(Pointer(Result)^,aStrLen);
end;

procedure WriteStringToStream(F: TStream; aStr: String);
var 
   aStrLen : Integer;
begin
  aStrLen:=Length(aStr);
  F.WriteBuffer(aStrLen,SizeOf(Integer));
  F.WriteBuffer(Pointer(aStr)^,aStrLen); 
end;


mfG
mirage228

_________________
May the source be with you, stranger.
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 01.02.04 13:35 
Hi,

vielen Dank - genau das hab ich gesucht.

AXMD
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: So 01.02.04 16:30 
oder Treader und Twriter verwenden, dort gibt es read- und writestring sowie vereinfachende Schreib und lese zugriffe für anderen Typen (integer, boolean)

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: So 01.02.04 17:53 
mirage228 hat folgendes geschrieben:
Da habe ich was für dich:

Eine Prüfung auf Length() = 0 wäre auch nicht schlecht.

[code]function ReadStringFromStream(F: TStream): String;
var
aStrLen : Integer;
begin
F.ReadBuffer(aStrLen,SizeOf(Integer));
SetLength(Result,aStrLen);
if aStrLen > 0 then
F.ReadBuffer(Pointer(Result)^,aStrLen);
end;

procedure WriteStringToStream(F: TStream; aStr: String);
var
aStrLen : Integer;
begin
aStrLen:=Length(aStr);
F.WriteBuffer(aStrLen,SizeOf(Integer));
if aStrLen > 0 then
F.WriteBuffer(Pointer(aStr)^,aStrLen);
end;[/delphi]

_________________
Ist Zeit wirklich Geld?