• Sábado 14 de Diciembre de 2024, 15:55

Autor Tema:  Tamaño De Un Archivo  (Leído 2112 veces)

dieguito

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Tamaño De Un Archivo
« en: Sábado 7 de Abril de 2007, 17:10 »
0
Que tal gente, estoy empezando a programar en C++ sobre Linux con Kdevelop. Nunca programe con un lenguaje orientado a objetos por lo tanto quise probar con c++.

Estoy buscando una libreria en la que pueda obtener el tamaño en bytes de un archivo, en mi caso una imagen en jpg.

Otra cosa, alguna pagina que contenga librerias gratis, se podria decir multiplataformas ? y libres ?

Gracias

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Tamaño De Un Archivo
« Respuesta #1 en: Sábado 7 de Abril de 2007, 19:06 »
0
con iostream no soy tan ducho asi que te paso la facil

fseek al archivo hasta la posicion 0 de SEEK_END y despues ftell para saber el tamaño en bytes, acordate de volverlo al principio si lo vas a seguir usando :D

sobre paginas con librerias libres

sourceforge.net
freshmeat.com
gnu.org

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Tamaño De Un Archivo
« Respuesta #2 en: Sábado 7 de Abril de 2007, 19:52 »
0
Cita de: "bob esponja"
con iostream no soy tan ducho asi que te paso la facil

fseek al archivo hasta la posicion 0 de SEEK_END y despues ftell para saber el tamaño en bytes, acordate de volverlo al principio si lo vas a seguir usando :D

sobre paginas con librerias libres

sourceforge.net
freshmeat.com
gnu.org
mmm, no estoy tan seguro si te sirve con una imagen, quiza necesites alguna API para eso.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Tamaño De Un Archivo
« Respuesta #3 en: Sábado 7 de Abril de 2007, 19:59 »
0
Cita de: "AnioN"
mmm, no estoy tan seguro si te sirve con una imagen, quiza necesites alguna API para eso.
Sirve para cualquier tipo de archivo sin importar su contenido, a grosso modo un archivo no es mas que una sucesion de bytes.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Tamaño De Un Archivo
« Respuesta #4 en: Sábado 7 de Abril de 2007, 20:21 »
0
Cita de: "Eternal Idol"
Cita de: "AnioN"
mmm, no estoy tan seguro si te sirve con una imagen, quiza necesites alguna API para eso.
Sirve para cualquier tipo de archivo sin importar su contenido, a grosso modo un archivo no es mas que una sucesion de bytes.
claro, tenes razon.  :D Seria algo asi no?

Código: Text
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.   char nombre[11] = "pedro.jpg";
  7.   FILE *fichero;
  8.   long int  final;
  9.  
  10.   fichero = fopen( nombre, "r" );
  11.  
  12.   fseek( fichero, 0L, SEEK_END );
  13.   final = ftell( fichero );
  14.  
  15.   fseek( fichero, 0L, SEEK_SET );
  16.  
  17.   printf( "Tamaño del fichero \"%s\": %d bytes\n", nombre, final );
  18.  
  19.   if( !fclose(fichero) )
  20.     printf( "Fichero cerrado\n" );
  21.   else
  22.   {
  23.     printf( "Error: fichero NO CERRADO\n" );
  24.     return 1;
  25.   }
  26.  
  27.   return 0;
  28. }
  29.  

dieguito

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Tamaño De Un Archivo
« Respuesta #5 en: Domingo 8 de Abril de 2007, 04:11 »
0
Funciona bárbaro, te molesta si me comentas que hace cada linea ?. Todavía no pude encontrar una pagina donde me diga o explique como utilizar cada libreria o por lo menos las mas comunes alguna pagina ??

Gracias!

dieguito

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Tamaño De Un Archivo
« Respuesta #6 en: Domingo 8 de Abril de 2007, 04:33 »
0
Bueno lo deje asi.

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <iostream>
  5.  
  6. // Devuelve el tamaño del archivo diego.jpg
  7. int peso()
  8. {
  9.   FILE *fichero;
  10.  
  11.   fichero = fopen("diego.jpg","r"); // Abre el archivo en modo lectura
  12.  
  13.   fseek(fichero, 0L, SEEK_END);
  14.  
  15.   return(ftell(fichero));
  16. }
  17.  
  18. int main()
  19. {
  20.   std::cout << "Tamaño de diego.jpg " << peso() << " bytes" << std::endl;
  21.  
  22.   return 0;
  23. }
  24.  
  25.  

imagino que fseek(fichero, 0L, SEEK_END); lee ?? y almacena en fichero la cantidad de bytes ?? de inicio a final ?

y luego FILE *fichero es un puntero ??

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Tamaño De Un Archivo
« Respuesta #7 en: Domingo 8 de Abril de 2007, 20:20 »
0
Citar
imagino que fseek(fichero, 0L, SEEK_END); lee ?? y almacena en fichero la cantidad de bytes ?? de inicio a final ?

y luego FILE *fichero es un puntero ??

FILE *fichero es un puntero a una estructura de tipo FILE que contiene informacion sobre el fichero, fseek(fichero, 0L, SEEK_END); mueve el apuntador del fichero (el indice que indica que byte estoy por leer actualmente) a a 0 bytes con respecto al final (osea al final), despues ftell te dice el byte en el que esta el apuntador del fichero, que como esta al final, resulta ser el tamaño del archivo.


BTW te olvidaste volverlo a donde estaba, si el usuario estaba haciendo algo van a pasar cosas raras :D

Código: Text
  1.  
  2. long tamanio( FILE* fd )
  3. {
  4.     long pos = ftell( fd );
  5.     long size;
  6.  
  7.     fseek(fd, 0L, SEEK_END);
  8.     size = ftell( fd );
  9.  
  10.     fseek(fd, pos, SEEK_SET);
  11.  
  12.     return size;
  13. }
  14.  
  15.  

no lo probe, supongo que esta bien.