Entwickler-Ecke

Internet / Netzwerk - Datei donwload - nur im RAM halten statt auf HDD speichern


schismatic - Di 26.05.09 09:56
Titel: Datei donwload - nur im RAM halten statt auf HDD speichern
Morgen!

Ich habe hier ein (hoffentlich einfaches) Problem zu dessen Lösung mir jedoch keinerlei Wissen zur verfügung steht.

Mein kleines Tool das ich geschrieben habe lädt aktuell eine Datei aus dem Internet herunter und speicher diese auf der Festplatte. Jedoch wäre es mir wesentlich lieber wenn die Datei nur im Arbeitsspeicher für die Dauer des downloads gehalten wird und anschließend gelöscht wird. Da ich etwa mit 1.000 Downloads die Woche rechne wäre es wohl nicht besonders schonend für die Festplatte immmer und immer wieder auf der gleichen Stelle herumzuschreiben :)

Hier der Code den ich für den Download benutze:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure DownloadFile(URL, DestinationFile, Username, Password : string);
var
  FileStream: TFileStream;
  HTTP : TIdHTTP;
begin
  FileStream := TFileStream.Create(DestinationFile, fmCreate);
  HTTP := TIdHTTP.Create;
  HTTP.Request.BasicAuthentication := true;
  HTTP.Request.Username := Username;
  HTTP.Request.Password := Password;
  HTTP.HandleRedirects := true;
  HTTP.Get(URL, FileStream);
  HTTP.Free;
  FileStream.Free;
end;


Wie man sieht wird zuerst eine Datei auf auf der Festplatte erstellt (DestinationFile) und anschließend beginnt der Download.

Kann ich das nun irgendwie abändern das es wie gesagt nur im Arbeitsspeicher gehalten wird und nach dem Download wieder gelöscht wird?


Xentar - Di 26.05.09 10:16

Wenn eine Festplatte nach 1000 Schreibzyklen pro Woche auseinanderfällt, hat sie es nicht anders verdient.. :D

Einige allgemeine Dinge zu deinem Quellcode:
- Wieso downloadest du was, nur um es hinterher wieder zu löschen? Klingt ein wenig nach Statistik pushen ;)
- Schau dir mal try..finally..end an

Und zu deiner Frage:
Wenn ein TFileStream eine Datei schreibt, was könnte man wohl nehmen, wenn der Stream nur im Speicher bleiben soll?


Narses - Di 26.05.09 10:16

Moin und :welcome: im Forum!

user profile iconschismatic hat folgendes geschrieben Zum zitierten Posting springen:
Da ich etwa mit 1.000 Downloads die Woche rechne wäre es wohl nicht besonders schonend für die Festplatte immmer und immer wieder auf der gleichen Stelle herumzuschreiben
Wenn du sowas vermeiden willst, dann solltest du besser nie wieder ein Betriebssystem (z.B. Windows) von Platte booten... :rofl:

user profile iconschismatic hat folgendes geschrieben Zum zitierten Posting springen:
Kann ich das nun irgendwie abändern das es wie gesagt nur im Arbeitsspeicher gehalten wird und nach dem Download wieder gelöscht wird?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure DownloadFile(URL, DestinationFile, Username, Password : string);
var
  temp: String;
  HTTP : TIdHTTP;
begin
  HTTP := TIdHTTP.Create;
  HTTP.Request.BasicAuthentication := true;
  HTTP.Request.Username := Username;
  HTTP.Request.Password := Password;
  HTTP.HandleRedirects := true;
  temp := HTTP.Get(URL);
  HTTP.Free;
end;
Das sollte es schon sein. ;) Was man auch selbst rausfindet, wenn man mal ein bischen die Methodenliste durchgeblättert hätte... :roll: :zwinker:

cu
Narses


schismatic - Di 26.05.09 10:23

Ach menno :D

Ich danke Euch für den Hinweis. Statistik pushen kommt tatsächlich fast hin, hat jedoch nur für mich eine Bedeutung und sonst keinerlei Auswirkungen ;)