我正在使用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;
你们专家认为使用内存流(memorystream)还是文件流(filestream)有什么区别?在使用一种或另一种类型时,EXE文件的结构是否有任何差异?哪种类型被推荐使用?
谢谢!祝你周末愉快!
TMemoryStream
内部使用TFileStream
将数据保存到文件(用于SaveToFile
方法),因此答案很简单 - 使用TFileStream
。 - TLamawith
的做法让我感到害怕。我建议你停止这样做。 - David Heffernan