[SRC] ByteCounter

Iniciado por [L]ord [R]NA, 17 Enero 2011, 18:14 PM

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

[L]ord [R]NA

::) Pequeño codigo en C++ que cuenta la cantidad de bytes de un archivo pasado como parametro.

Código (cpp) [Seleccionar]

#include <cstdio>
#include <iostream>

void main(int argc, char *argv[])
{
FILE *pFile;
long size;
if(argc==2)
{
pFile = fopen(argv[1],"r");
if(pFile!=NULL)
{
if(!fseek(pFile,0,SEEK_END))
{
size=ftell(pFile);
fclose(pFile);
std::cout<<"El tamaño total del archivo es ";
std::cout<<size<<" Bytes."<<std::endl;
}
else std::cout<<"Sucedio un problema mientras se trataba de obtener la cantidad de bytes."<<std::endl;
}
else std::cout<<"Problemas con el archivo, verifique que el archivo exista."<<std::endl;
}

else std::cout<<"Uso: "<<argv[0]<<" <ruta de archivo>"<<std::endl;
}


Ejemplos:

lordrna@AAO150:~/Proyectos/C++/ByteCounter$ ls
bc  bc.cpp

lordrna@AAO150:~/Proyectos/C++/ByteCounter$ ./bc bc.cpp
El tamaño total del archivo es 627 Bytes.

lordrna@AAO150:~/Proyectos/C++/ByteCounter$ ./bc cdc
Problemas con el archivo, verifique que el archivo exista.

Littlehorse

ftell retorna long, por lo tanto size debe ser long. El archivo de cabecera en C++ es cstdio.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

[L]ord [R]NA

... se me paso lo del valor de retorno de ftell() pero con stdio.h compila bien.

RyogiShiki

no es que haya problema por la compilación en el stdio.h, esque tu código está usando la librería standar de C++ y por esa razón la cabecera no debería ser <stdio.h> estandar de C sino más bien <cstdio> standar de C++


Littlehorse

Citarno es que haya problema por la compilación en el stdio.h

En realidad si es un problema ya que generar híbridos entre C y C++ sin un motivo real siempre es un error. Los archivos de cabecera stdio.h y cstdio son distintos y están pensados para cada lenguaje en particular.


Citarpero con stdio.h compila bien.

Que un código compile no significa que este bien hecho. Igualmente en este caso lo del archivo de cabecera es secundario, el error principal es el de utilizar un int en lugar del long requerido.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

RyogiShiki

Cita de: Littlehorse en 17 Enero 2011, 22:58 PM
En realidad si es un problema ya que generar híbridos entre C y C++ sin un motivo real siempre es un error. Los archivos de cabecera stdio.h y cstdio son distintos y están pensados para cada lenguaje en particular.


Que un código compile no significa que este bien hecho. Igualmente en este caso lo del archivo de cabecera es secundario, el error principal es el de utilizar un int en lugar del long requerido.

Saludos!


Es bueno saberlo, gracias por la acotación


[L]ord [R]NA

Listo... ya el codigo esta con las correcciones recomendadas.

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com