InternetReadFile() und Progress Bar
-
Hallo !
Wie kann ich das machen das die Progress Bar fortschritt mit jeden gelesenen Byte anzeigt ?
Danke schon mal im Voraus.
-
Du musst in einer while Schleife immer schrittweise einlesen und immer wieder die Fortschrittsanzeige aktualisieren
-
Ja genau das ist mein Problem !
Ich habe schon 2 Beispiele ausprobiert von Winapi.net und das aus dem PSDK aber das hat nicht funtioniert.
-
Inwiefern funktioniert der nicht bzw. was funtkioniert nicht? kannst du es kompilieren? Falls nicht: welche Fehler?
Und dann wäre es hilfreich deine Versuche zu sehen (Code)
-
Hallo !
Das ist die Source für die Funktion:
Die Progressbar zeigt keine Veränderung an.bool CProgUpdate::GetUpdateInformation(HWND hProgressControl) { DWORD cb; LPCH pch; LPCH pchTmp; hFile=InternetOpenUrl(hIntSession,"Die Adresse zu dem File",NULL,0,INTERNET_FLAG_RELOAD,0); if(hFile==NULL) return false; if(InternetQueryDataAvailable(hFile,&cb,0,0)==false) return false; SendMessage(hProgressControl,PBM_SETRANGE,0,MAKELPARAM(0,cb/2048)); SendMessage(hProgressControl,PBM_SETSTEP,(WPARAM)1,0); pch=(LPCH)LocalAlloc(LPTR,sizeof(char)*2048); pchTmp=pch; do { InternetReadFile(hFile,pchTmp,sizeof(char)*2048,&cb); SendMessage(hProgressControl,PBM_STEPIT,0,0); } while(cb); return true; }
-
Ist die Datei auch größer als 2KB?
Bei cb/2048 wird nämlich nach der Berechnung die Nachkommastellen abgeschnitten, was dann bei < 2048 0 ergäbe
und ein PBM_SETRANGE mit 0 bis 0 funktioniert dann natürlich nichtAlso cb/2048.0 + 0.5 sollte helfen
- falls es daran liegt
-
Mir ist aufgefallen das die Funktion "InternetQueryDataAvailable" aus dem Internet und "GetFileSize" von der Festplatte völlig verschiedene Werte liefern obwohl im PSDKDoc steht das diese "Bytes" zurückgeben.
-
Ich hab auch schon bei manchen FTP-Servern festgestellt, dass dort nach dem Upload eine ganz andere Dateigröße für die Datei angezeigt wird - vielleicht hängt das auch damit zusammen
-
Und wie kriege ich das Problem jetzt in den Griff ????
-
Die unterschiedliche Dateigrößen dürften aus den unterschiedlichen Dateisystemen resultieren.
-
Tag !
Wie das funktioniert und wodurch das kommt interesiert mich eigentlich relativ wennig. Ich will nur wissen wie ich das endlich hinbekomme andere Programme können das doch auch !
-
Was genau klappt denn jetzt noch nicht
-
Ich habe jetz den Code genommen von Winapi.net:
bool CProgUpdate::GetUpdateInformation(HWND hProgressControl) { DWORD cb; DWORD dwRead=0; char chRead; int i=0; hFile=InternetOpenUrl(hIntSession,"Adresse",NULL,0,INTERNET_FLAG_RELOAD,0); if(hFile==NULL) return false; if(InternetQueryDataAvailable(hFile,&cb,0,0)==false) return false; SendMessage(hProgressControl,PBM_SETRANGE,0,MAKELPARAM(0,100)); SendMessage(hProgressControl,PBM_SETSTEP,(WPARAM)10,0); do { InternetReadFile(hFile,&chRead,1,&dwRead); i++; if(i>=cb/10) { i=0; SendMessage(hProgressControl,PBM_STEPIT,0,0); } } while(dwRead); return true; }
Der Balken der Progress Bare geht ganz schnell hin und her.
Fängt an geht bis durch und fängt wieder von vorn an.