gpt4 book ai didi

Delphi - MemoryStream 或 FileStream

转载 作者:行者123 更新时间:2023-12-03 14:52:13 24 4
gpt4 key购买 nike

我正在使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com