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
fseek(fd, 0, SEEK_END);
tam = ftell(fd);
fclose(fd);
printf("cantidad del archivo: %ld\n", tam);
despues lo envio por socket
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:
#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.
#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.