Guy*_*ush 7 delphi memorystream indy filestream idhttp
我正在使用Indy(idHTTP)从Internet下载EXE文件,我可以使用memorystream或filestream将其保存到磁盘,但我真的不知道它们之间是否有任何区别(可能在文件的结果结构中? ).我找不到答案.
这里有两个简单的函数来模拟我在做什么:
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;
Run Code Online (Sandbox Code Playgroud)
您的专家考虑使用一种或其他类型(内存流或文件流)?使用一种或其他类型时,EXE文件的结构有什么不同吗?推荐什么类型?
谢谢!周末愉快!
之间不存在差异TMemoryStream或TFileStream从视点流.
它们都是流并保存一个字节流,并且都是从中派生出来的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;
Run Code Online (Sandbox Code Playgroud)
并用它来调用它 TFileStream
var
LStream : TStream;
begin
LStream := TFileStream.Create( 'MyFile.exe', fmCreate );
if DownloadToStream( '', LStream ) then
...
end;
Run Code Online (Sandbox Code Playgroud)
或者TMemoryStream您喜欢的任何流实例
| 归档时间: |
|
| 查看次数: |
19752 次 |
| 最近记录: |