Я хочу скопировать часть FileStream в поток памяти.Delphi, FileStream и MemoryStream
FileStream.Write(Pointer(MemoryStream)^, MemoryStream.Size);
FileStream.Read(Pointer(MemoryStream)^, count);
Это правильно? это не работает для меня.
Я хочу скопировать часть FileStream в поток памяти.Delphi, FileStream и MemoryStream
FileStream.Write(Pointer(MemoryStream)^, MemoryStream.Size);
FileStream.Read(Pointer(MemoryStream)^, count);
Это правильно? это не работает для меня.
Вы должны читать() из FileStream в отдельный буфер, а затем Write(), что в MemoryStream, а именно:
var
Buffer: PByte;
GetMem(Buffer, NumberOfBytes);
try
FileStream.ReadBuffer(Buffer^, NumberOfBytes);
MemoryStream.WriteBuffer(Buffer^, NumberOfBytes);
finally
FreeMem(Buffer);
end;
Поскольку вы имеете дело с двумя объектами TStream, было бы легче используйте вместо этого метод TStream.CopyFrom(), то есть:
MemoryStream.CopyFrom(FileStream, NumberOfBytes);
Спасибо большое! Я использовал CopyFrom, но я думаю, что ваш solutin даст мне лучшую производительность. Еще раз спасибо. –
Метод TStream.CopyFrom() использует аналогичный подход «читать-в-буфере-чем-писать-внутри», но делает это с большей обработкой ошибок и управлением буферами, чем показанный мной. –
ReadBuffer следует использовать, когда количество прочитанных байтов известно и исправлено, лучше использовать Read - он может фактически вернуть меньше байтов, чем размер буфера, когда их больше нет. Я бы написал: BytesRead: = FileStream.Read (Buffer ^, NumberOfBytes); MemoryStream.Write (Buffer ^, BytesRead); – 2010-06-16 07:49:21
Чтобы отформатировать код, выделите его в редакторе и нажмите Control-K. –