XE6 - 如何将TStringStream内容转换为TStream?

Yog*_*007 0 delphi

我使用以下代码将TStringStream转换为TStream.但是当我尝试将TStringStream的内容复制到TStream时会出错.

我似乎犯了一些非常明显的错误,但我无法抓住它.

我的代码:

procedure TfrmMain2.Button1Click(Sender: TObject);
var
  SS:TStringStream;
  S, S2:TStream;
  PhotoStr: String;
begin
  PhotoStr := 'Hello World, Testing: /9j/4AAQSkZJRgABAQAAAQABAAD//' +
     'gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIp' +
     'LCBxdWFsaXR5ID0gODUK/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJ' +
     'DBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e';

  SS := TStringStream.Create(PhotoStr);
  S := TStream.Create();
  S.CopyFrom(SS, SS.Size);  //<= This line gives error
end;
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息是:...类EWriteError,消息'Stream write error'.

我不知道为什么我会收到这个错误.

Dav*_*nan 5

您正在创建TStream一个抽象类的实例.你必须永远不要TStream直接实例化.总是实例化子孙类代替,如TFileStream,TMemoryStream