Я загружаю EXE-файл из Интернета с помощью Indy (idHTTP), и я могу использовать memystream или filestream для сохранения его на диск, но я действительно не знаю, есть ли разница между ними (возможно, в структуре результата файла?). Я не мог найти ответа.Delphi - MemoryStream или FileStream
Где, здесь 2 простых функций, чтобы имитировать то, что я делаю:
Function DownloadMS(FUrl, Dest: String): Boolean;
var
Http: TIdHTTP;
Strm: TMemoryStream;
Begin
Result := False;
Http := TIdHTTP.Create;
Strm := TMemoryStream.Create;
With Http, Strm Do
Try
Try
Get(FUrl, Strm);
If (Size > 0) Then
Begin
Position := 0;
SaveToFile(Dest);
Result := True;
end;
Except
end;
Finally
Strm.Free;
Http.Free;
end;
end;
Function DownloadFS(FUrl, Dest: String): Boolean;
var
Http: TIdHTTP;
Strm: TFileStream;
Begin
Result := False;
Http := TIdHTTP.Create;
Strm := TFileStream.Create(Dest, fmCreate);
With Http, Strm Do
Try
Try
Get(FUrl, Strm);
Result := (Size > 0);
Except
end;
Finally
Strm.Free;
Http.Free;
end;
end;
Что вы по мнению экспертов об использовании одного или другого типа (MemoryStream или FileStream)? Есть ли какая-либо разница в структуре EXE-файла при использовании того или иного типа? Какой тип рекомендуется?
Спасибо! Хороших выходных!
В 'TMemoryStream' использует внутренне' TFileStream' для сохранения в файл (для метода SaveToFile), поэтому ответ довольно прост - используйте 'TFileStream'. – TLama
Я мог подумать о 2 причинах использования TMemoryStream вместо TFileStream. Избегайте очистки в файловой системе в случае исключения и необходимости некоторых манипуляций, прежде чем сохранять ее в файл. – bummi
Ваше бессмысленное использование 'with' заставляет меня бояться. Я бы рекомендовал вам прекратить это делать. –