Delphi,FileStream和MemoryStream

p.m*_*aes 14 delphi delphi-7

我想将FileStream的一部分复制到内存流.

FileStream.Write(Pointer(MemoryStream)^, MemoryStream.Size);
FileStream.Read(Pointer(MemoryStream)^, count);
Run Code Online (Sandbox Code Playgroud)

是对的吗?它不适合我.

Rem*_*eau 19

你必须从FileStream中将Read()放入一个单独的缓冲区,然后将Write()放到MemoryStream中,即:

var
  Buffer: PByte;

GetMem(Buffer, NumberOfBytes);
try
  FileStream.ReadBuffer(Buffer^, NumberOfBytes);
  MemoryStream.WriteBuffer(Buffer^, NumberOfBytes);
finally
  FreeMem(Buffer);
end;
Run Code Online (Sandbox Code Playgroud)

由于您正在处理两个TStream对象,因此使用TStream.CopyFrom()方法会更容易,即:

MemoryStream.CopyFrom(FileStream, NumberOfBytes);
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!我使用了CopyFrom,但我认为你的solutin会给我一个更好的表现.再次感谢. (2认同)
  • 只是想帮助那些可能遇到和我一样问题的人。对于非常大的文件(> 1.5GB),使用 Remy 发布的解决方案比使用 MemoryStream.CopyFrom 方法要快得多。我花了两天时间才弄清楚...:( (2认同)