Ich würde gerne eine progress bar angezeigt in der Konsole-Fenster, während eine Datei heruntergeladen wird. Mein code ist: Download-Datei mit libcurl in C/C++.
int progress_func(void* ptr,doubleTotalToDownload,doubleNowDownloaded,doubleTotalToUpload,doubleNowUploaded){//ensure that the file to be downloaded is not empty//because that would cause a division by zero error later onif(TotalToDownload<=0.0)){return0;}//how wide you want the progress meter to beint totaldotz=40;double fractiondownloaded =NowDownloaded/TotalToDownload;//part of the progressmeter that's already "full"int dotz = round(fractiondownloaded * totaldotz);//create the "meter"int ii=0;
printf("%3.0f%% [",fractiondownloaded*100);//part that's full alreadyfor(; ii < dotz;ii++){
printf("=");}//remaining part (spaces)for(; ii < totaldotz;ii++){
printf(" ");}//and back to line begin - do not forget the fflush to avoid output buffering problems!
printf("]\r");
fflush(stdout);//if you don't return 0, the transfer will be aborted - see the documentationreturn0;}
Ich danke Ihnen sehr! Ich brauchte nur auf Mathematik zählen.h und es funktioniert gut.
froh, dass es Euch gefällt!
Hallo Hier habe ich implementiert, die Art und Weise, die Sie vorgeschlagen, aber ich habe nicht bekommen, einen beliebigen Wert in dieser Funktion progress_func .
Schönste, die ich angepasst habe, dies zu C funktioniert sehr sehr sehr gut!
Froh, dass Sie mochte es, aber ich bin ein wenig ratlos, der code oben ist C 😉
Vielen Dank 🙂 es funktioniert sehr gut angepasst an PHP
vielen Dank für den edit! Wenn Sie mit php, auch check out phpclimate für einen einfachen Weg, um einen noch schöneren bar 🙂
Die lib ist interessant. vielleicht werde ich Sie später zu verwenden. jetzt bin ich mit den code 🙂
Funktionszeiger, der sollte mit dem
curl_progress_callback Prototyp gefunden
in . Diese Funktion bekommt
genannt von libcurl, statt dessen
interne gleichwertig mit einer häufigen
Intervall-Betrieb (grob
einmal pro Sekunde), egal ob Daten
wird übertragen oder nicht.
Unbekannt/nicht verwendete argument Werte übergeben
der Rückruf wird auf null gesetzt
(wie, wenn Sie nur die Daten laden, die
upload-Größe bleibt 0). Rückkehr
ein Wert ungleich null, der von diesem Rückruf
verursachen libcurl zum Abbruch des
transfer und zurück
CURLE_ABORTED_BY_CALLBACK.
Also:
Erstellen Sie eine Funktion, die wie folgt aussieht
int progress_func(void* ptr,doubleTotalToDownload,doubleNowDownloaded,doubleTotalToUpload,doubleNowUploaded){//It's here you will write the code for the progress message or bar}
Und einige zusätzliche Optionen, die nach den bestehenden Möglichkeiten
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);//already there//Internal CURL progressmeter must be disabled if we provide our own callback
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);//Install the callback function
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_func);
Das ist alles, was getan werden muss, um
Mein problem ist, dass ich nicht machen Sie einen funktionierenden code für die Fortschrittsanzeige.
wenn ich put curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); // Installieren der callback-Funktion curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_func); dann bekomme ich im download fehlgeschlagen
stellen Sie sicher, dass Sie die Rückgabe " 0 " in das callback
Ihrem Messgerät.
Aus der curl-Dokumentation
Also:
Erstellen Sie eine Funktion, die wie folgt aussieht
Und einige zusätzliche Optionen, die nach den bestehenden Möglichkeiten
Das ist alles, was getan werden muss, um
put curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
// Installieren der callback-Funktioncurl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_func);
dann bekomme ich im download fehlgeschlagenWie apt-progress bar