Datei Download?
-
Hallo,ich brauche einen Code um eine Datei aus dem Internet zu downloaden und auf der Festplatte zu speichern? Ich habe es schon mit URLDownloadToFile probiert da fehlt mir aber irgendwie die "Urlmon.h" und die Lib fehlt mir auch. Meine Entwicklungsumgebung ist Dev-C++. Und ich würde das gerne in C machen.
-
-
lad dir mal das neuste winapi paket von mingw.org runter.
-
oh sorry habe gerade nachgeguckt, auch im neusten paket ist die urlmon.h noch nicht drin.

-
Hier abba nur weil ich gut drauf bin .. das ganze funzt mit einer config.dat in der in der ersten Zeile der direkte downloadlink von Http steht
//Header #include <iostream> #include <conio.h> #include <tchar.h> #include <windows.h> #include <wininet.h> #include <fstream> //Namespace using namespace std; // die wininet.lib linken #pragma comment(lib, "wininet.lib") int Downloader::download() { std::string line; ifstream file_stream("Data/config.dat"); if (!file_stream) return false; while (std::getline(file_stream, line)) { HINTERNET hInet = InternetOpen(_T("MyAppName"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); if(hInet != NULL) { // Verbindung zum Server herstellen LPCTSTR httpFile = line.c_str(); HINTERNET hRemoteFile = InternetOpenUrl(hInet,httpFile, NULL, 0, INTERNET_FLAG_RELOAD, 0); if(hRemoteFile != NULL) { // die lokale Datei erzeugen, in die wir schreiben werden HANDLE hLocalFile = CreateFile(_T("repack.exe"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //Repack.exe ist nur ein Beispiel wie soll die Datei heißen und welcher Pfad vielleicht C: ? Dir überlassen! if(hLocalFile != NULL) { // solange Daten verfügbar sind... DWORD numberOfBytesAvailable = 0; while(InternetQueryDataAvailable(hRemoteFile, &numberOfBytesAvailable, 0, 0)) { if(numberOfBytesAvailable > 0) { // ...allokiere einen Puffer... LPVOID pBuffer = malloc(numberOfBytesAvailable); // ...und fülle ihn mit den verfügbaren Daten DWORD numberOfBytesRead = 0; if(InternetReadFile(hRemoteFile, pBuffer, numberOfBytesAvailable, &numberOfBytesRead) == FALSE) { // TODO: Fehlerbehandlung } if(numberOfBytesRead != numberOfBytesAvailable) { // TODO: Fehlerbehandlung } // empfangene Daten in die lokale Datei schreiben DWORD numberOfBytesWritten = 0; if(WriteFile(hLocalFile, pBuffer, numberOfBytesRead, &numberOfBytesWritten, NULL) == FALSE) { // TODO: Fehlerbehandlung } if(numberOfBytesWritten != numberOfBytesRead) { // TODO: Fehlerbehandlung } // Puffer wieder freigeben free(pBuffer); } else { break; } } // das Handle freigeben CloseHandle(hLocalFile); } // das Handle freigeben InternetCloseHandle(hRemoteFile); } // das Handle freigeben InternetCloseHandle(hInet); } return 0; } }
-
Und ich würde das gerne in C machen.
*Hust*