InternetReadFile() und Progress Bar



  • 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 nicht

    Also 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.


Anmelden zum Antworten