Autor Beitrag
Arne
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 31.12.05 16:00 
Mahlzeit zusammen,

ich möchte einen String mittels TFileStream.WriteBuffer in eine Datei schreiben, aber das klappt nicht, wie ich es mir vorstelle.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  myString    : String;

begin
  { hier schreibe ich was in myString rein, was laut Debugger auch funktioniert }
  myStream.WriteBuffer(myString, 32);
end;


Der Prototyp von TFileStream.WriteBuffer lautet:

WriteBuffer(const: Buffer; Count : LongInt);

Wenn ich mit dem Debugger in TFileStream.WriteBuffer reinsteppe, enthält Buffer "kein Wert".
Kann mir jemand erklären, welchen TypeCast ich machen muß, oder wie ich sonst hinbekomme?


Thanx und Guten Rutsch,
Arne
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 31.12.05 16:08 
String speichern mit Streams ist etwas gewhönungsbedürftig:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
    S: TStream;
    L: Integer;
    St: String;

    L := Length(St);
    S.WriteBuffer(L, SizeOf(Integer));
    If L <> 0 Then
        S.WriteBuffer(S[1], L);


Lesen analog dazu ... Beachte, dass Du vor dem Lesen der Daten aus dem Stream den String erst alloziieren musst mit SetLength (d.h. Länge lesen, SetLength aufrufen dann String-Daten lesen).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Opa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Sa 31.12.05 16:23 
Ich hatte gerade was für mich gemacht um einen Stream nach string zu lesen *g
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:
23:
24:
25:
26:
27:
function _LoadFromStream(Stream: TStream):string;
var//Classes
  Size: integer;
begin
  result := '';
  try
    Size := Stream.Size - Stream.Position;
    SetString(result, nil, Size);
    Stream.Read(Pointer(result)^, Size);
  except
    result := '';
  end;
end;

function _FileLoad(const DateiName: string):string;
var
  Stream : TStream;
begin
  result := '';
  Stream := TFileStream.Create(DateiName, fmOpenRead or fmShareDenyWrite);
  try
  Stream.Position := 0;
  if boolean(Stream.Size) then result := _LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
Arne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 31.12.05 17:57 
Danke - klappt jetzt :P
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: Sa 31.12.05 18:19 
Hallo

alternativ die Treader und Twriter klassen anschaun, die haben für jeden Typ ihre eigenen Methoden, die Daten in den stream zu schreiben. Um die Längenangaben beim string brauchst du dich so nicht zu kümmern.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)