2016-02-05 57 views
0

我正在使用以下代碼將TStringStream轉換爲TStream。但是當我嘗試將TStringStream的內容複製到TStream時會出錯。XE6 - 如何將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; 

我得到的錯誤信息是:...類EWriteError與消息 '流寫入錯誤'。

我不知道爲什麼我得到這個錯誤。

+4

一個忠告的話,總是在這樣的問題中包含錯誤信息。並逐字包括它,不要形容它。通常會在錯誤消息中找到信息。不要忽略他們的內容。 –

+1

您的示例對S沒有任何作用。如果您使用S的實際代碼採用TStream類型的值,則它也會接受類型TStringStream的值,因爲TStringStream從TStream繼承。 –

+0

@StijnSanders,我沒有提供整個代碼。最後一行本身會給出錯誤並在那裏停止。我已經注意到了這一點。 –

回答

5

您正在創建一個抽象類TStream的實例。您絕不能直接實例化TStream。總是實例化一個後代類,例如TFileStreamTMemoryStream等。