Downloadmanager
-
Hallo mitsüchtige Forenteilnehmer
In einem anstehenden Projekt würde ich gerne die Funktionalität nutzen
einen Download an einer bestimmten Stelle zu stoppen und später wieder aufnehmen zu können.Kennt ihr eine entsprechende KLasse die man hierfür verwenden könnte?
Natürlich aus dem Freeware-Bereich. Auf den einschlägig bekannten Seiten
wie Codeproject und Codeguru war nichts zu finden.Ich scheue etwas den Aufwand mich an diesem Teil selbst zu versuchen!
Habt ihr sonst einen guten Tip wie ich das ganze angehen könnte, wenn
ich absolut nicht drumrum komme das selbst zu entwerfen?Joogel
-
http://www.codeproject.com/internet/pauseresume.asp?df=100&forumid=11738&exp=0&select=473518
http://www.gamedev.net/community/forums/topic.asp?topic_id=196337
http://web6.codeproject.com/useritems/ftpresume.asp?df=100&forumid=208101&exp=0&select=1229458
-
Da habe ich tatsächlich was übersehen. Dank an dich Jochen Kalmbach
-
Uff..schweeere Kost. Was ich dachte, dass erst so einfach aussah entpuppt sich
nun als zeitfressender Albtraum.Wenn ich von einer Seite oder einem anderen PC eine Datei downloaden möchte
und den Download pausieren lassen können will, muss ich soweit ich es jetzt
verstehe:1. InternetOpen,InternetConnect und FtpOpenFile verwenden
2. die Daten in eine Datei schreiben und bei Abbruch und anschließendem
weiteren downloaden mit fopen("c:\\dateiname.exe","a") festlegen, dass
die Datei weitergeschrieben werden soll.3. Hierbei ist es wichtig bei InternetReadFile im 2 oder 4ten?? Parameter
anzugeben, ab wo ich in der Datei weiter auslesen will (muss wohl auch Käse
sein was ich hier erzähl :p )Habe ich das zumindest ansatzweise richtig zusammengefaßt? Bei mir hat sich in den Lernprojekten
absolut nichts getan..alle gelöscht. Die Beispiele in den obigen Links waren entweder
nicht ganz vollständig, oder haben schon in den kompilierten Projekten nicht
funktioniert.Ich bin schon etwas gaga von dem ganzen gegoogle, aber wäre nett wenn mir
mal bitte bitte jemand hierbei helfen könnt.Ich würde mich über einen Beispielcode freuen, sofern jemand dazu die Zeit
und Lust aufbringen kann. Mir ist klar, dass ihr sicher besseres zu tun habt,
nur ich sehe einfach keine Sonne ohne eure Hilfe!
-
Ok hier ein Ansatz der auch funktioniert. Die gewünschte Datei wird
runtergeladen. Aber wenn ich den Download abbreche und dann fortsetze
wird die Datei vom Anfang an, zusätzlich zu dem bereits geschriebenen,
angehängt.daher meine Frage, wie ich beim Anhalten des Download nun sinnvoll
speichern kann, bis wo die Datei bereits geladen wurde. An dem Punkt
muss ich dann ja auch wieder anfangen beim Fortsetzen des Download.HINTERNET url; HINTERNET open; char URL_LOCATION[512] = {"ftp://www.my.de/datei.exe"}; char final_file_name[512] = {"c:\\dateixx.exe"}; open = InternetOpen("ExampleDL", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); url = InternetOpenUrl(open, URL_LOCATION, NULL, 0, 0, 0); FILE *saved; unsigned long buffer; char name[128]; saved = fopen(final_file_name, "a"); while(InternetReadFile(url, name, sizeof(name), &buffer) && buffer != 0) { fwrite(name, sizeof(char), buffer, saved); name[buffer] = '\0'; } fclose(saved);
-
Wie in den Artikeln beschrieben musst du per FtpCommand den Befehl
"REST (empfangene Datengröße in bytes)" schicken.
-
Und noch ein Kinken, der urplötzlich auftritt:
"The Stack around the variable name was corrupted"..
Wenn ich dich richtig verstehe mache ich jetzt praktisch vor dem
InternetOpenUrl
erstmal folgendes:
HINTERNET hFtpCommand = NULL; BOOL blRes = FtpCommand(open, TRUE, FTP_TRANSFER_TYPE_BINARY, _T("REST 50000"), NULL, &hFtpCommand);
Wobei die 50000 dann der DWORD-Wert wäre, bis zu dem zuletzt innerhalb
von ReadInternetFile die Datei geschrieben wurde?!
-
Joogel schrieb:
Und noch ein Kinken, der urplötzlich auftritt:
"The Stack around the variable name was corrupted"..
Nimm mal das
name[buffer] = '\0';
raus. Wenn buffer >= sizeof(name) ist, dann schreibst du ja hinter das Array, was nicht zulässig ist. Ich frage mich auch, wozu du das überhaupt drin hast. Du liest ja einfach nur plain data, hat also nix mit C-Strings zu tun.
-
Die Datei wird offenbar aus irgendeinem Grund nur mit "wb" aber nicht via
"a" oder "a+" richtig geschrieben...
-
Wenn du's als binary brauchst, dann versuch's doch mal mit "ab" oder "a+b".
-
Danke Du hast recht.
Aber mit dem Pausieren des Download komme ich einfach nicht weiter.
-
Du kannst einen Download nicht pausieren, sondern nur abbrechen.
Und das Resume hab ich Dir ganz am Anfang mit drei Links versucht zu zeigen...
-
Sei bitte ruhig. Wenn ich Hilfe von dir will, dann sage ich das schon. Mit so einer arroganten Haltung bekommst du bei mir und sicherlich bei anderen Forum-Usern keine Plus-Punkte.
-
Hi falscher Joogel. Es stimmt dass ich keinen Schritt weiter bin
und sicher liegt es auch daran, dass ich kein Programmierer bin, sondern
noch Schüler.Da JK immerhin helfen wollte und bei mir lediglich falsche Voraussetzungen
erwartet, finde ich dein Posting einfach nur frech!Wenn du eine persönliche Abneigung gegen JK hast klär es mit deinem Usernamen
und fertig!!Anhand der IP wird er als Mod eh sehen, dass ich nicht der bin der den Dreck
gepostet hat....
-
Joogel schrieb:
Es stimmt dass ich keinen Schritt weiter bin
In dem letzten ;ink war ein Code-Snipsel drin:
CString NetCmd; NetCmd.Format("noop\n\rrest %I64d\n\rretr %s",TotalGotSize,NetPathFile); if(!CMyFTP::Cmd(NetConn,NetCmd,hNetResponse)){ //throw &NetGetFaultTolerant; } OpenFile4Append(LocalPathFile,LocalFile); #define BufferSize _1K2_ char Buffer[BufferSize]; DWORD ChunkGotSize=0; while(true){ FaultTolerantX(NetGetFileFault,"FTP get file"); if(!InternetReadFile(hNetResponse,Buffer,BufferSize,&ChunkGotSize)){ // ...
So sollte es eigentlich gehen... hab es aber noch nicht probiert... sorry...
Joogel schrieb:
Anhand der IP wird er als Mod eh sehen, dass ich nicht der bin der den Dreck gepostet hat....
Jau...
-
So kann es gehen. Ich habe mich auf den Beitrag konzentriert und
gar nicht gesehen, dass du ursprünglich den Beitrag in der Diskussion
des Links meintest.Ich probiere das jetzt mal so aus.