c++ Datei downloaden

GeileEier

Mitglied
hallo,
ist es in C++ möglich eine datei aus dem internet auf seinen localen rechner zu downloaden?
bsp.
http://www.domain.de/datei.txt --> C:\datei.txt

ich habe bereits google benutzt und bin auf URLDownloadToFile () gestoßen.
das funktioniert aber nicht wirklich richtig.
gibt es noch andere methoden?
kennt ihr einen befehl der das ganze zu 100% kann?

danke
 
URLDownloadToFile funktioniert einwandfrei.

das hier ist mein code:
PHP:
#include <windows.h>
#include <string>

using namespace std;

int main() {

	HRESULT hr;
	string szUrl  = "http://www.forrester.com";
	string szFile = "C:\\test.html";

	hr = URLDownloadToFile ( NULL, szUrl.c_str() , szFile.c_str() ,0,NULL );

	if(!SUCCEEDED(hr)) {
		string mMessage = "Download failed";
		MessageBox(NULL, mMessage.c_str(), mMessage.c_str(), MB_OK | MB_ICONERROR);
	}

	return 0;

}

beim compilieren mit DEV-C++ bekomme ich immer folgenden fehler:
error: `URLDownloadToFile' undeclared (first use this function)
 
PHP:
#include <windows.h>
#include <string>
#include <urlmon.h>
#pragma comment(lib,"urlmon.lib")

using namespace std;

int main() {

    HRESULT hr;
    string szUrl  = "http://www.forrester.com";
    string szFile = "C:\\test.html";

    hr = URLDownloadToFile ( NULL, szUrl.c_str() , szFile.c_str() ,0,NULL );

    if(!SUCCEEDED(hr)) {
        string mMessage = "Download failed";
        MessageBox(NULL, mMessage.c_str(), mMessage.c_str(), MB_OK | MB_ICONERROR);
    }

    return 0;

}
jetzt bekomme ich auch noch den error "urlmon.h: No such file or directory"
ok, ich verknüpfe urlmon.h die datei manuell aus dem ordner "\Microsoft SDKs\Windows\v6.0A\" auf mein projekt und erhalte eine rießen liste mit FEHLERN und ERRORS
 
Ja, weil die nötigen anderen includes der URLMon.h nicht stimmen. Und zum Thema Dev-CPP:
Von diesem IDE ist abzuraten. Wird nicht mehr wirklich weiterentwickelt.

Passe einfach die Includeordner entsprechend an, dass das SDK auch da mit dabei ist.
 
@GeileEier: http://www.tutorials.de/forum/php/359747-ftp-zugriff-mit-php.html#post1863995 habe ich heute Nacht nicht aus Jux und Dollerei gepostet.

Netiquette #15 hat gesagt.:
Unser Forum ist kein Chatroom. Kurz-Beiträge ("Ein-Zeilen Postings"), die einfach so ins Forum "geklatscht" werden, werden ohne Vorwarnung von einem Moderator oder Administrator gelöscht. Das gleiche gilt insbesondere für Beiträge, die in Rechtschreibung, Satzbau und Verständlichkeit nicht ein vernünftiges, allgemein übliches und altersgruppen-übergreifendes Niveau erfüllen. Jugendsprache, regional verbreitete Dialekte und durchgehend kleingeschriebene Beiträge sind ebenfalls unerwünscht. Mit anderen Worten: wer erfolgreich die im Deutsch-Unterricht erlernten Kenntnisse praxisnah auf unserem Forum anwenden kann, wird nicht mit dieser Regel in Konflikt kommen. "Wiederholungstäter" werden, nachdem sie zuvor von einem Moderator auf die Mängel hingewiesen wurden, ggf. unbefristet gesperrt.

Das ist jetzt meine zweite Aufforderung binnen weniger Stunden, dich an die Forenregeln zu halten. Bei weiterer Mißachtung sehe ich mich leider gezwungen, dir als Vorwarnung für einen begrenzten Zeitraum die Rechte zu entziehen, am Forenleben aktiv teilzunehmen.

mfg Maik
 
am besten lade ich mir ein neues SDK runter.
welches soll ich da nehmen?

Das ist eine denkbar schlechte Idee. Das SDK ist komplett korrekt. Du kannst aber nicht einfach die URLMon.h kopieren, welche zig andere Dateien aus dem SDK includiert und dich dann wundern, dass die nicht mehr gefunden werden.

Füge in deinen Compilereinstellungen das Verzeichnis zum SDK einfach als eines der Standardincludeverzeichnisse hinzu.
 
Das ist eine denkbar schlechte Idee. Das SDK ist komplett korrekt. Du kannst aber nicht einfach die URLMon.h kopieren, welche zig andere Dateien aus dem SDK includiert und dich dann wundern, dass die nicht mehr gefunden werden.

Füge in deinen Compilereinstellungen das Verzeichnis zum SDK einfach als eines der Standardincludeverzeichnisse hinzu.
Man kann das MS Windows SDK nicht mit dem GCC verwenden.

Aber der GCC ist in der Lage direkt zu einer DLL zu linken. Man muss nur den richtigen Funktionsnamen verwenden:
C++:
extern "C" __declspec(dllimport)
HRESULT URLDownloadToFileA(          LPUNKNOWN pCaller,
    const char* szURL,
    const char* szFileName,
    DWORD dwReserved,
    void* lpfnCB
);

hr = URLDownloadToFileA ( NULL, szUrl.c_str() , szFile.c_str() ,0,NULL );
Das #pragma comment() versteht der GCC nicht.

Du mußt schon die urlmon.dll auf der Kommandozeile angeben.

Gruß
 
Zuletzt bearbeitet:
Zurück