2010-06-05 104 views
10

我想將FileStream的一部分複製到內存流中。Delphi,FileStream和MemoryStream

FileStream.Write(Pointer(MemoryStream)^, MemoryStream.Size); 
FileStream.Read(Pointer(MemoryStream)^, count); 

對不對?它不適合我。

+5

要格式化您的代碼,請在編輯器中選擇它,然後按Control-K。 – 2010-06-05 00:51:47

回答

15

你必須從的FileStream閱讀()到一個單獨的緩衝區,然後寫(),爲了將MemoryStream,即:

var 
    Buffer: PByte; 

GetMem(Buffer, NumberOfBytes); 
try 
    FileStream.ReadBuffer(Buffer^, NumberOfBytes); 
    MemoryStream.WriteBuffer(Buffer^, NumberOfBytes); 
finally 
    FreeMem(Buffer); 
end; 

既然你處理兩個T流對象,它會更容易請使用TStream.CopyFrom()方法,即:

MemoryStream.CopyFrom(FileStream, NumberOfBytes); 
+2

非常感謝!我使用了CopyFrom,但我認爲你的解答會給我更好的表現。 再次感謝。 – 2010-06-05 14:42:36

+0

TStream.CopyFrom()方法在內部使用了一種類似於緩衝區讀寫的方法,但是對於更多的錯誤處理和緩衝區管理來說,這比我所展現的要好。 – 2010-06-07 23:47:21

+0

當要讀取的字節數已知且固定時,應使用ReadBuffer,使用更好Read - 實際上,如果沒有更多字節,它可以返回比緩衝區大小更少的字節。我會寫: BytesRead:= FileStream.Read(Buffer ^,NumberOfBytes); MemoryStream.Write(Buffer ^,BytesRead); – 2010-06-16 07:49:21

相關問題