Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: TMemoryStream in String umwandeln - funzt nicht...

  Alt 12. Mai 2008, 10:49
Zitat von -Lucky-:
Delphi-Quellcode:
function MemoryToString(ms: TMemoryStream): AnsiString;// inline;
//...
  ms := TMemoryStream.Create;
 try
    Len := ms.Size;
    SetLength(Result, Len);
    if Len > 0 then
      ms.ReadBuffer(Result[1], Len);
  finally
    ms.Free;
  end;
end;
Hi Lucky,

sag mal was liefert wohl ms.Size nach der Zeile TMemoryStream.Create?! Wenn der Wert mal > 0 ist, dann würde ich mir echt Sorgen machen!
Wenn Du dann einen Stream übergibst (und den nicht gerade vorher erzeugst), dann musst Du auch tunlichst darauf achten, dass die Position auf 0 zurückgesetzt wird. Hast Du also gerade ein Datum in den Stream eingelesen, dann steht der Positions-Zeiger des Streams eben auch am Ende (um anzuhängen). Versuch mal folgenden Code:

Delphi-Quellcode:
function memoryToString(const ms: TMemoryStream): String;
var Length: Integer;
begin
  length := Integer(ms.Size);
  setLength(result,
            length);

  ms.Position := 0;

  ms.Read(Result[1],
          length);

  ShowMessage(result);
end;
Die Rückwärtsfunktion sollte dann einfach sein, so was in der Art:

Delphi-Quellcode:
function StringToMemory(const s: String): TMemoryStream;
begin
  result := TMemoryStream.Create;
  
  if length(s) > 0 then
  begin
    result.write(s[1],
                 length(s));
  end;
end;
Gruß,
Der Unwissende

[add]
Nix roter Kasten, deshalb das gleiche gesagt wie SirThornberry
[/add]
  Mit Zitat antworten Zitat