Ich lade eine EXE-Datei aus dem Internet mit Indy (idHTTP), und ich kann Memorystream oder Filestream verwenden, um es auf der Festplatte zu speichern, aber ich weiß wirklich nicht, ob es einen Unterschied zwischen ihnen gibt in der Ergebnisstruktur der Datei?). Ich konnte dafür noch keine Antwort finden.Delphi - MemoryStream oder FileStream
Wo, hier 2 einfache Funktionen zu simulieren, was ich tue:
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;
Was Sie Experten denken, über die eine oder andere Art (Memory oder Filestream) mit? Gibt es einen Unterschied in der Struktur der EXE-Datei, wenn Sie den einen oder anderen Typ verwenden? Welcher Typ wird empfohlen?
Vielen Dank! Ein schönes Wochenende wünsche ich ihnen!
Die 'TMemoryStream' wie intern verwendet' TFileStream 'zum Speichern in Datei (für die 'SaveToFile'-Methode), also ist die Antwort ziemlich einfach - benutze' TFileStream'. – TLama
Ich könnte über 2 Gründe für die Verwendung von TMemoryStream anstelle von TFileStream nachdenken. Vermeiden Sie eine Bereinigung im Dateisystem im Falle einer Ausnahme und die Notwendigkeit einiger Manipulationen, bevor Sie sie in einer Datei speichern. – bummi
Ihr mutwilliger Gebrauch von 'mit' macht mich erschrocken. Ich würde empfehlen, dass du damit aufhörst. –