InternetReadFile() Problem
-
Kann sich mal bitte jemand diese Funktion ansehen ?
Hier funktioniert was nicht richtig.
Wenn ich z.B. ein JPEG runterlade und in eine Datei schreiben lasse sind nur 3,4 Zeichen drin das wars. Bei HTML Datein geht das da ist sie komplett.DWORD dwRead=0; DWORD fsize; int i=0; char *chRead; char *chReadCur; 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+1); memset(chRead,0,fsize); chReadCur=chRead; do { i++; InternetReadFile(hFile,chReadCur,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); chReadCur+=dwRead; } while(dwRead); chRead[fsize]='\0'; MessageBox(0,chRead,0,0); InternetCloseHandle(hFile); SetWindowText(GetDlgItem(hWnd,nDlgItem),"Download erfolgreich abgeschlossen...");
-
1.) Das Auslesen in 1 Byte Schritten ist sicher nicht sehr effizient
2.) Es handelt sich hier um Binärdaten, d.h. es kommen z.B. auch 0-Zeichen vor (was im String als Ende angesehen wird)
-
1. Soll ich die Datei in 10- Byte Schritten auslesen ?
2. Wie kann man das 0- Terminator Problem lösen ?
-
cpp_guy schrieb:
1. Soll ich die Datei in 10- Byte Schritten auslesen ?
Mindestens - würde ich mal sagen (was am effizientesten ist weiß ich auch nicht genau, aber oft bewegt sich das doch in Größenordnungen von 1 bis 2 KB)
cpp_guy schrieb:
2. Wie kann man das 0- Terminator Problem lösen ?
In dem du keine Stringfunktionen zum Schreiben der Daten verwendest
- zeig doch davon mal den Code
-
Das oben ist der Code den ich zum schreiben nehme.
Wenn das richtig funktionieren würde dann hätte ich die Befehle zum schreiben der Datei schon eingebaut.
-
Ich brauche hier unbedingt mal Hilfe !
-
Du schreibst hier aber doch noch nichts in eine Datei
Wenn du bisher nur die MessageBox-Ausgabe hast und du da nicht alles siehst brauchst du dir keine Sorgen zu machen, das ist normal so(da das char-Array eben als Null-terminierter String aufgefasst wid)
-
Den Code nehme ich um den String in eine Datei zu schreiben.
Aber das klappt nicht die Datei ist nur ein paar b/kb groß.FILE* pFile; pFile=fopen("C:\\bild.jpg","w"); fputs(chRead,pFile); fclose(pFile);
-
Na logo, für fputs hört ein String auch bei einer binären 0 auf....
Sobald Dein Bild also eine (binäre) 0 enthält, ist Schluß...
-
Wenn wir hier schon im WinAPI-Forum sind: CreateFile, WriteFile, CloseHandle