Saltar al contenido

Barra de progreso de la consola libcurl de C++

Mantén la atención porque en este escrito vas a encontrar el resultado que buscas.

Solución:

Tu medidor.

#include 

int progress_func(void* ptr, double TotalToDownload, double NowDownloaded, 
                    double TotalToUpload, double NowUploaded)

    // ensure that the file to be downloaded is not empty
    // because that would cause a division by zero error later on
    if (TotalToDownload <= 0.0)) 
        return 0;
    

    // how wide you want the progress meter to be
    int totaldotz=40;
    double fractiondownloaded = NowDownloaded / TotalToDownload;
    // part of the progressmeter that's already "full"
    int dotz = (int) round(fractiondownloaded * totaldotz);

    // create the "meter"
    int ii=0;
    printf("%3.0f%% [",fractiondownloaded*100);
    // part  that's full already
    for ( ; 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 documentation
    return 0; 

De la documentación curl

CURLOPT_PROGRESSFUNCTION

Puntero de función que debe coincidir con el prototipo curl_progress_callback que se encuentra en . Esta función es llamada por libcurl en lugar de su equivalente interno con un intervalo frecuente durante la operación (aproximadamente una vez por segundo) sin importar si los datos se transfieren o no. Los valores de argumento desconocidos/no utilizados que se pasan a la devolución de llamada se establecerán en cero (como si solo descargara datos, el tamaño de carga seguirá siendo 0). Devolver un valor distinto de cero de esta devolución de llamada hará que libcurl cancele la transferencia y devuelva CURLE_ABORTED_BY_CALLBACK.

Entonces:

Usted proporciona una función que se ve así

int progress_func(void* ptr, double TotalToDownload, double NowDownloaded, double TotalToUpload, double NowUploaded)

    // It's here you will write the code for the progress message or bar

Y algunas opciones extra después de las opciones existentes

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); 

Eso es todo lo que hay que hacer

Reseñas y calificaciones de la guía

Si guardas algún titubeo y capacidad de perfeccionar nuestro artículo eres capaz de realizar una interpretación y con gusto lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *