[SOLUCIONADO] Porcentaje del progreso de una transferencia de archivos?

Iniciado por proxy_lainux, Mayo 14, 2013, 06:47:52 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Mayo 14, 2013, 06:47:52 PM Ultima modificación: Septiembre 07, 2014, 01:09:08 PM por Expermicid
alguien sabe como se consigue el porcentaje de la cantidad de un archivo, para usarlo en este caso en un transferencia de archivos y saber el porcentaje de envio ... por ejemplo

Lo que hago es saber la cantidad exacta del archivo

Código: c

fseek(fd, 0, SEEK_END);
tam = ftell(fd);
fclose(fd);
printf("cantidad del archivo: %ld\n", tam);




despues lo envio por socket

Código: c
while(i < tam){

leido = fread(bu, sizeof(char), 256, fb);
send(newfd, bu, leido, 0);
i = i + leido;
printf("Enviando-- %ld bytes / %ld bytes", i, tam);
}



pero no se de que forma puedo encontrar el porcentaje de envio para que me muestra de 0% al 100% el envio... alguien sabe como se hace?

El 1% es el tamaño del archivo dividido entre 100  ::)

un saludo!

entonces tengo que dividir  k = tam/100 y guardarlo en una variable y hacer una variable aparte que vaya avanzando (i++)?

acaso tendria que hacer un if que compare (i == k) y aumente a 1% cada vez que i sea igual a k? ò acaso hay algo mas en lo que deberia pensar aparte de eso?


Una regla de tres,
El tamaño es 100%
La posición es X
X=(posición*100)/tamaño

Donde posición seria la posición en un determinado instante.

Un pequeño ejemplo:

Código: c

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *ARGV[])
{
unsigned int tamano;

FILE *archivo=fopen(ARGV[1], "r");

fseek(archivo, 0, SEEK_END);
tamano=ftell(archivo);
fseek(archivo, 0, SEEK_SET);
while(!feof(archivo))
{
getc(archivo);
if(ftell(archivo)%(tamano/100)==0)
{
printf("Leido el %i%% del archivo\r", (int)((ftell(archivo)*100)/tamano));
fflush(stdout); //~ Si no limpias el buffer no se muestra nada
sleep(1); //~ Una pequeña pausa para que veas como crece el porcentaje
}
}

fclose(archivo);
return 0;
}


Sa1uDoS

Un ejemplo simple para que lo comprendas.
Código: c

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int total = 1000; // Numeros pares
    int i;
    int Parte;
    int porcentaje = 0;


    Parte = (total/100);

    printf("El 1%% = %i\n",Parte);

    for (i=0;i<=total;i+=Parte)
    {

        printf("i = %i, Porcentaje = %i%%\n",i,porcentaje);
        porcentaje += 1;
    }

    system("PAUSE");

    return 0;
}


Para numeros impares solo tendrías que redondear de cuanto serían las partes.

un saludo.