Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: [L]ord [R]NA en 17 Enero 2011, 18:14 pm



Título: [SRC] ByteCounter
Publicado por: [L]ord [R]NA en 17 Enero 2011, 18:14 pm
::) Pequeño codigo en C++ que cuenta la cantidad de bytes de un archivo pasado como parametro.
 
Código
  1. #include <cstdio>
  2. #include <iostream>
  3.  
  4. void main(int argc, char *argv[])
  5. {
  6. FILE *pFile;
  7. long size;
  8. if(argc==2)
  9. {
  10. pFile = fopen(argv[1],"r");
  11. if(pFile!=NULL)
  12. {
  13. if(!fseek(pFile,0,SEEK_END))
  14. {
  15. size=ftell(pFile);
  16. fclose(pFile);
  17. std::cout<<"El tamaño total del archivo es ";
  18. std::cout<<size<<" Bytes."<<std::endl;
  19. }
  20. else std::cout<<"Sucedio un problema mientras se trataba de obtener la cantidad de bytes."<<std::endl;
  21. }
  22. else std::cout<<"Problemas con el archivo, verifique que el archivo exista."<<std::endl;
  23. }
  24.  
  25. else std::cout<<"Uso: "<<argv[0]<<" <ruta de archivo>"<<std::endl;
  26. }
  27.  

Ejemplos:
Código:
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.


Título: Re: [SRC] ByteCounter
Publicado por: Littlehorse en 17 Enero 2011, 18:29 pm
ftell retorna long, por lo tanto size debe ser long. El archivo de cabecera en C++ es cstdio.

Saludos


Título: Re: [SRC] ByteCounter
Publicado por: [L]ord [R]NA en 17 Enero 2011, 21:11 pm
... se me paso lo del valor de retorno de ftell() pero con stdio.h compila bien.


Título: Re: [SRC] ByteCounter
Publicado por: RyogiShiki en 17 Enero 2011, 21:32 pm
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++


Título: Re: [SRC] ByteCounter
Publicado por: Littlehorse en 17 Enero 2011, 22:58 pm
Citar
no 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.


Citar
pero 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!


Título: Re: [SRC] ByteCounter
Publicado por: RyogiShiki en 17 Enero 2011, 23:24 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


Título: Re: [SRC] ByteCounter
Publicado por: [L]ord [R]NA en 18 Enero 2011, 16:36 pm
Listo... ya el codigo esta con las correcciones recomendadas.


Título: Re: [SRC] ByteCounter
Publicado por: leogtz en 18 Enero 2011, 21:56 pm
Te falta el return.