2010-06-05 12 views
10

FileStream의 일부를 메모리 스트림에 복사하려고합니다.Delphi, FileStream 및 MemoryStream

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

맞습니까? 그것은 나를 위해 일하지 않습니다.

var 
    Buffer: PByte; 

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

두은 TStream 객체를 처리하고 있기 때문에, 그것을보다 쉽게 ​​될 것이다 :

+5

코드를 포맷하려면 편집기에서 코드를 선택하고 Control-K를 누릅니다. –

답변

15

당신은 즉, MemoryStream을에) 저를 별도의 버퍼로하여 FileStream()에서 읽은 후 (작성해야 TStream.CopyFrom() 메서드를 대신 사용하십시오 :

MemoryStream.CopyFrom(FileStream, NumberOfBytes); 
+2

고마워요! CopyFrom을 사용했지만, 당신의 solutin이 나에게 더 나은 성능을 줄 것이라고 생각합니다. 다시 한 번 감사드립니다. –

+0

TStream.CopyFrom() 메서드는 내부적으로 유사한 read-into-buffer-write-it 방식을 사용하지만, 내가 보여준 것보다 더 많은 오류 처리 및 버퍼 관리를 수행합니다. –

+0

ReadBuffer는 읽어야 할 바이트 수가 알려지고 고정되어있을 때 사용되어야합니다. Read를 사용하는 것이 더 좋습니다 - 실제로는 더 이상 없을 때 버퍼 크기보다 적은 바이트를 반환 할 수 있습니다. 나는 다음과 같이 쓸 것이다 : BytesRead : = FileStream.Read (Buffer ^, NumberOfBytes); MemoryStream.Write (Buffer ^, BytesRead); –