Как преобразовать TBytes в двоичный файл? (используя MemoryStream) - PullRequest
13 голосов
/ 22 июня 2011

Как я могу преобразовать Tbytes тип в Binary file, используя MemoryStream?

Ответы [ 4 ]

27 голосов
/ 22 июня 2011

Или непосредственно с помощью 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;

Я не верю, что использование TMemoryStream здесь полезно, поскольку оно просто включает лишнюю ненужную кучураспределение / открепление.

11 голосов
/ 22 июня 2011

Ответ Уве сработает, если у вас есть TBytesStream. Если нет:

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;
6 голосов
/ 22 июня 2011

FI в Delphi XE:

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;
5 голосов
/ 10 февраля 2014

Ну, если в ответах упоминается Delphi XE и другие потоки, кроме TMemoryStream, то я предлагаю еще один метод.

 procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
 begin
   TFile.WriteAllBytes( FileName, Data );
 end;
...