C++ Updater, welches datein aus dem Internet downloaded

Die Fi

Lt. Junior Grade
Dabei seit
Aug. 2005
Beiträge
298
Updater, welcher Datein aus dem Internet runterlädt

Hi,
ich möchte ein kleines Programm, schreiben, welches als Updater fungieren soll.

1. Er soll erst mal eine manifest.xml Datei Downloaden in der all die Upgedaten Datein aufgelistet werden und an Hand welcher eine Überprüfung der vorhandenen Dateien stattfinden soll.
Nun hab ich aber ein Grundlegendes Problem, wie kann ich es Programmieren, das was aus dem Internet runter geladen wird?

2. Wenn das Programm Grundlegend funktioniert, soll es von alleine zip Dateien extrahieren. (Wenn die Dateien auf dem Updateserver in .zip Form vorhanden sind)

Danke im Voraus
MfG DieFi
 
Zuletzt bearbeitet:

cx01

Ensign
Dabei seit
Mai 2010
Beiträge
241
Für beide Probleme gibt es Libraries. Dateien runterladen kannst du mit libcurl. Zip-Dateien entpacken mit zlib.
 

Die Fi

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Aug. 2005
Beiträge
298
Danke cx01. Ich bin mittlerweile auch weitergeleitet worden und bin hier gelandet.
Link. Bin mit dem Code zwar noch nicht komplett durch, aber ich denke mal das es genau das richtige ist, wenn jemand tieferes Verständnis über dieses Thema erlangen möchte ^^.
 

badday

Commander
Dabei seit
Sep. 2007
Beiträge
3.023
Da ich gerade einen Updater schreibe, kann ich dir vll. einige Tipps geben. Wenn du das ganze automatisieren willst, kann du z. B. mit cryptopp ( http://www.cryptopp.com/ ) sowohl Server-, als auch Clientseitig Checksummen erstellen. Anhand dieser siehst du, ob eine Datei aktuell ist (wenn du das nicht willst, lass das einfach weg). Wenn du plattformübergreifend programmieren willst (auch wenn nicht), ist es sinnvoll eine Bibliothek wie libcurl zu verwenden. Bzgl. der .zips empfhielt sich zlib ( http://www.zlib.net/ ).

Der Download einer Datei ist relativ simpel:

Code:
curl = curl_easy_init();
if(curl)
{
        fp = fopen(clientFilename.c_str(),"wb");
        if(fp == NULL)
        {
            cerr<<"Fehler"<<endl;
            return false;
        }

        curl_easy_setopt(curl, CURLOPT_URL, serverFile.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        fclose(fp);
}
Wobei clientFilename der komplette Path + Dateiname ist, unter dem es gespeichert werden soll und serverFile die komplette Adresse der Serverdatei.

Gruß,

badday
 
Top