InternetReadFile()- Buffer Problem
-
Hallo !
Ich habe folgendes Problem: Ich lasse mit dem Code unten eine Datei aus dem Internet
herunterladen. Wie kreig ich das jetzt hin das ich am ende die Komplette Datei
in einem Buffer habe ? Weil wenn ich das so mache wird der Buffer immer wieder
überschrieben.Danke
bool CProgUpdate::GetUpdateInformation(HWND hWnd,HWND hProgressControl,int nDlgItem,int nDlgItem2) { DWORD dwRead=0; DWORD fsize; int i=0; char *chRead; char stat[MAX_PATH]; hTmpFile=InternetOpenUrl(hIntSession,"...",NULL,0,INTERNET_FLAG_RELOAD,0); fsize=InternetSetFilePointer(hTmpFile,0,NULL,FILE_END,0); InternetCloseHandle(hTmpFile); hFile=InternetOpenUrl(hIntSession,"...",NULL,0,INTERNET_FLAG_RELOAD,0); if(hFile==NULL) { InternetCloseHandle(hFile); SetWindowText(GetDlgItem(hWnd,nDlgItem),"Fehler bei Downloaden..."); return false; } SetWindowText(GetDlgItem(hWnd,nDlgItem),"Download..."); SendMessage(hProgressControl,PBM_SETRANGE,0,MAKELPARAM(0,fsize/1000)); SendMessage(hProgressControl,PBM_SETSTEP,(WPARAM)1,0); chRead=(char*)malloc(fsize); do { i++; InternetReadFile(hFile,&chRead,1,&dwRead); sprintf(stat,"%d kB von %d kB heruntergeladen",i/1000,fsize/1000); SetWindowText(GetDlgItem(hWnd,nDlgItem2),stat); SendMessage(hProgressControl,PBM_SETPOS,i/1000,0); } while(dwRead); InternetCloseHandle(hFile); SetWindowText(GetDlgItem(hWnd,nDlgItem),"Download erfolgreich abgeschlossen..."); return true; }
-
Also, du hast einen passenden Puffer und bekommst eine Datei in kleinen Stückchen, die du nacheinander immer wieder an den Anfang des Puffers schreibst. Das funktioniert natürlich nicht.
Richtig wäre es, die Stücke aneinanderzureihen, sprich den Puffer von vorne der Reihe nach mit Daten zu füllen.char *chReadCur; //--- Lese-Zeiger auf die aktuelle Stelle innerhalb des Pufffers ... chRead=(char*)malloc(fsize); chReadCur = chRead; //--- Lese-Zeiger auf Anfang des Puffers setzen do { i++; InternetReadFile(hFile, &chReadCur, 1,&dwRead); //--- Daten an die Stelle des Lese-Zeigers übertragen sprintf(stat,"%d kB von %d kB heruntergeladen",i/1000,fsize/1000); SetWindowText(GetDlgItem(hWnd,nDlgItem2),stat); SendMessage(hProgressControl,PBM_SETPOS,i/1000,0); chReadCur += dwRead; //--- Lese-Zeiger um Anzahl der gelesenen Bytes erhöhen } while(dwRead);
Jetzt hast du die Datei in einem Stück.