Hice una función simple, que obtiene el tamaño de un archivo.¿Cómo obtener el tamaño de un archivo que es mayor a 4 Gb?
int file_size(char * filename)
{
int size;
struct stat st;
stat(filename, &st);
size = st.st_size;
return size;
}//file_size
Se está trabajando muy bien, pero si tengo un archivo que el tamaño es más grande que 4 Gb de lo que reciba un número negativ espalda, y, por supuesto, este no es el tamaño de archivo correcto. Entonces, ¿cómo puedo obtener el tamaño de un archivo tan grande? Creo que el valor de retorno debería ser algo así como int, pero no sé qué, y no creo, eso resolvería mi problema.
Gracias,
Kampi
Actualización:
Hola!
Encontré la solución. Tengo que usar __stat64. Modifiqué mi función, y ahora está recuperando el tamaño real. Lo probé con un archivo grande de 8Gb.
unsigned long long int file_size(char * filename)
{
unsigned long long int size;
struct __stat64 st;
__stat64(filename, &st);
size = st.st_size;
return size;
}//file_size
Y un aviso:
cuando solía printf, tuve que usar "% I64d" para imprimirlo.
¿Qué sucede si cambia 'int' a' off_t', o si no está disponible, 'size_t'? Tanto en el tipo de devolución como en la declaración de 'size'. –