C
Hallo,
Ich habe versucht eine Updatefunktion für eins meiner Programme zu schreiben , jedoch scheint curl nur einen Download pro programmausführung zuzulassen, da das Programm sobald der zweite Download startet mit einem "run failed" abstürtzt.
Der code:
#include <curl/curl.h>
#include <cstdio>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <fstream>
using namespace std;
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
char* version = "0.0.0";
void downloadFile(const char* url, const char* fname) {
CURL *curl;
FILE *fp;
CURLcode res;
curl = curl_easy_init();
if (curl){
fp = fopen(fname, "wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
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);
}
}
string get_online_version()
{
char* appdata = getenv("APPDATA");
char* newVersionPath = appdata;
strcat( newVersionPath,"\\test\\onlineversion.txt" );
downloadFile( "bla.tdl/update/version.txt",
newVersionPath) ;
string buffer;
ifstream file(newVersionPath);
getline(file,buffer);
file.close();
return buffer;
}
bool check_version()
{
string online_version = get_online_version();
cout << "This: " << version << endl;
cout << "New : " << online_version << endl;
if (version < online_version){
return true;
}
else {
return false;
}
}
bool update() {
char* appdata = getenv("APPDATA");
char* newVersionPath = appdata;
strcat( newVersionPath,"\\test\\setup.exe" );
downloadFile( "bla.tdl/update/setup.exe",
newVersionPath);
//system(newVersionPath);
return true;
}
int main()
{
curl_global_init(CURL_GLOBAL_ALL);
if(!check_version()){
cout << "Everything up to date" << endl;
return 0;
}
else{
cout << "Update verfügbar" << endl;
cout << "Do you want to update (yes)?:";
string line;
getline(cin, line);
if ( line.empty() )
{
update();
return 0;
}
else if (line == "yes"){
update();
return 0;
}
else if (line == "no"){
cout << "no";
}
}
}
Danke für eure Hilfe
--Crosant--