如何将TBytes转换为二进制文件?(使用MemoryStream)

Ker*_*mia 14 delphi binary file stream

如何将Tbytes类型转换为Binary file使用MemoryStream

Dav*_*nan 28

或者直接用a TFileStream来减少创建的中间对象的数量:

procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create(FileName, fmCreate);
  try
    if Data <> nil then
      Stream.WriteBuffer(Data[0], Length(Data));
  finally
    Stream.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我不相信使用TMemoryStream在这里有用,因为它只涉及额外的不必要的堆分配/释放.

  • `TMemoryStream.SaveToFile`通过`TFileStream`完成它的工作.最好切掉中间人并直接去"TFileStream". (7认同)

Mas*_*ler 12

如果您有TBytesStream,Uwe的答案将会有效.如果不:

procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var
  stream: TMemoryStream;
begin
  stream := TMemoryStream.Create;
  try
    if length(data) > 0 then
      stream.WriteBuffer(data[0], length(data));
    stream.SaveToFile(FileName);
  finally
    stream.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

  • @Mason一边说.您使用了错误的写入方法.您应该使用`WriteBuffer`,因为它是具有错误检查的那个.我相信你知道这一点,这是一个疏忽. (3认同)
  • 标题说:`使用MemoryStream`,我想我应该选择相关的答案.不是吗? (2认同)

Uwe*_*abe 6

在Delphi XE中的FI:

procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var
  stream: TBytesStream;
begin
  stream := TBytesStream.Create(Data);
  try
    stream.SaveToFile(FileName);
  finally
    stream.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

  • 使用SaveToFile时,TBytesStream或TMemoryStream会在幕后创建TFileStream.直接写入像David Heffernan所示的TFileStream可能更好. (4认同)

Ari*_*The 5

好吧,如果答案提到Delphi XE和其他流TMemoryStream,那么我建议另外一种方法.

 procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
 begin
   TFile.WriteAllBytes( FileName, Data );
 end;
Run Code Online (Sandbox Code Playgroud)