C++ Download File

kickerxy123

Erfahrenes Mitglied
Hallo zusammen,

ich habe derzeit ein Problem, bei dem ich nicht sicher bin, ob es am Server oder an meinem Code liegt...

Ich versuche eine Datei "a.txt" herunter zu laden von
-Server a: geht ohne Probleme, Datei wird korrekt übertragen root\b\a.txt
-Server b: schlägt jedes Mal fehl root\WWW\b\a.txt

Da es auf dem einen Server ohne Probleme geht, muss Server b irgendwie anders konfiguriert sein (allerdings kann ich das nicht so genau nachprüfen, ich weiß lediglich, dass auf beiden Apache läuft ->sind 2 kostenlose Webspaces unterschiedlicher Hoster).

Auf der anderen Seite muss es ja irgendwie mit C++ auch auf Server b gehen, da ich es im IE ohne Probleme anzeigen lassen kann oder er mir die Datei zum Download anbietet (je nach Endung/Browser).

Hier der relevante Code-Ausschnitt:
C++:
	hInternet = InternetOpen("Microsoft Internet Explorer", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
 
    if(!hInternet ) return -1;
 
    HINTERNET hURL = InternetOpenUrl(hInternet, pURL.c_str(), 0, 0, 0, 0);
    if(!hURL){InternetCloseHandle(hInternet);     return -2;}

     DWORD dummy = 20, d2 = 0;
    CHAR      lpszFileSize[20]; 
       
        if(FAILED(HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, (LPVOID)lpszFileSize, &dummy, &d2)))
    {
       writeToLog("Err#0#1#1");
       InternetCloseHandle(hURL); 
       InternetCloseHandle(hInternet);
       return -77; 			
	}
    fileSize = atoi(lpszFileSize); 
    if(fileSize <= 0) 
    { 
       ccout("The file you want to download doesn't exist\nor has file size zero: " + pURL + _STRING(" ErrCode: ",GetLastError()," moreInformation: ",lpszFileSize));
       InternetCloseHandle(hURL); 
       InternetCloseHandle(hInternet);
       return -4; 
    }
Laut Fehlermeldung ist lpszFileSize entweder Müll oder gar nichts. ErrorCode = 12150. Die eigentliche Funktion scheint allerdings nicht fehlzuschlagen, da er in den Abschnitt mit der -77 nicht hineingeht. Sollte ich es über HttpOpenRequest statt InternetOpenUrl versuchen?


Ich hoffe ihr könnt mir weiterhelfen :)
Danke und Gruß,
kickerxy



#EDIT:
Ich hätte es schon eher testen sollen, dachte aber, wenn schon die Dateigrößenabfrage nicht geht, dann wohl auch nicht der Download. Naja, nun habe ich es ausprobiert: Er downloadet die vollständige Datei ohne Probleme. Mein Problem ist nun also nur noch in der Abfrage der Dateigröße mittels HttpQueryInfo.
 
Zuletzt bearbeitet:
Hi.

Wenn der Webserver die Dateigröße nicht liefert kannst du nichts machen, da ist es egal welche Methode du verwendest.

Kläre also als erstes die Frage ob der Webserver die Dateigröße angibt oder nicht.

Gruß
 
Hi deepthroat,

auf die einfachsten Lösungen kommt man manchmal nicht... Du hast recht, der Webserver übermittelt die Dateigrößen schlicht gar nicht. Da ich eh crc32 Summen übermittel und prüfe, brauche ich die Dateigrößenprüfung auch nicht notwendigerweise und überprüfe sie nun nur, falls ein Server die Größe auch wirklich übermittelt.

Danke für die simple Lösung,
Viele Grüße,
kickerxy
 
Zurück