Sto scaricando un file EXE da internet usando Indy (idHTTP), e posso usare memorystream o filestream per salvarlo su disco, ma davvero non so se c'è qualche differenza tra loro (forse nella struttura dei risultati del file?). Non ho ancora trovato una risposta per questo.Delphi - MemoryStream o FileStream
Dove, qui ci sono 2 funzioni semplici per simulare quello che sto facendo:
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;
Quello che gli esperti pensare di utilizzare uno o l'altro tipo (MemoryStream o FileStream)? C'è qualche differenza nella struttura del file EXE quando si utilizza uno o altro tipo? Che tipo è raccomandato?
Grazie! Passa un bel weekend!
Il 'TMemoryStream' utilizza internamente' TFileStream' per il salvataggio su file (per il metodo 'SaveToFile'), quindi la risposta è piuttosto semplice - usa' TFileStream'. – TLama
Potrei pensare a 2 motivi per l'utilizzo di TMemoryStream invece di TFileStream. Evitare una pulizia del filesystem in caso di un'eccezione e la necessità di alcune manipolazioni prima di salvarlo in un file. – bummi
Il tuo uso sfrenato di 'with' mi fa paura. Ti consiglio di smettere di farlo. –