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*


Anmelden zum Antworten