Delphi - MemoryStream 或 FileStream

标签 delphi filestream indy memorystream idhttp

我正在使用Indy(idHTTP)从互联网下载一个EXE文件,我可以使用内存流或文件流将其保存到磁盘,但我真的不知道它们之间是否有任何区别(也许在结果结构中)文件?)。我还没有找到这个问题的答案。

这里有两个简单的函数来模拟我正在做的事情:

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;

您的专家如何看待使用一种或其他类型(内存流或文件流)?使用一种或其他类型时 EXE 文件的结构有什么区别吗?推荐什么类型?

谢谢!周末愉快!

最佳答案

从流的角度来看,TMemoryStreamTFileStream 之间没有区别。

它们都是流并保存字节流,并且都派生自 TStream

您可以像这样实现通用函数

function DownloadToStream( const AUrl : String; ADest : TStream ): Boolean;
var
  LHttp: TIdHTTP;
begin
  LHttp := TIdHTTP.Create;
  try
    LHttp.Get( AUrl, ADest );
    Result := ADest.Size > 0;
  finally
    LHttp.Free;
  end;
end;

并使用TFileStream调用它

var
  LStream : TStream;

begin
  LStream := TFileStream.Create( 'MyFile.exe', fmCreate );
  if DownloadToStream( '', LStream ) then
    ...
end;

TMemoryStream或您喜欢的任何流实例

关于Delphi - MemoryStream 或 FileStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375152/

相关文章:

c# - 为什么 ComputeHash 的执行速度比 certutil -hashfile 慢得多?

asp.net - 使用 Delphi 和 TIdHttp 将数据发布到 ASP .NET 页面

德尔福:Socket.ReadBytes();与 IOHandler.ReadBytes()

delphi - 整数的数学 'not'

delphi - 使用 Delphi Firemonekey 在 TImage 的 Canvas 上绘制一个圆圈

c# - 如何从末尾截断文件 X 字节?

sql-server - 全文索引未从 pdf 文件流返回任何结果

delphi - 自动调整 TCheckBox 的大小(如 TLabel)

delphi - Indy POP3 定期接收电子邮件

android - 套接字错误 #113 没有到 Android 主机的路由