Programación General > C/C++
fseek
maxstepin:
hola.
fseek(archivo, 0, SEEK_END);
printf("ntamaño del archivo %lu", (ftell(archivo)));
este codigo me indica el tamaño de un determinado archivo. lo he probado y funciona solo en archivos pequeños. cuando lo pruebo en archivos de 4GB o mas, se imprime 0 como resultado. hay veces que en archivos de 3,5GB si da un resultado, pero es incorrecto.
como podria averiguar el tamaño de archivos de 4GB o mas? hay algun limite para el tamaño de archivo?
saludos. :lol:
m0skit0:
Todo depende del sistema operativo y del sistema de ficheros. Hay sistemas de ficheros que no soportan ficheros de más de 2 GB o más de 4 GB... Esto implica que, aunque ftell() en el estándar POSIX devuelva long, es probable que sistemas que no cumplan el estándar 100% no devuelvan long (o ponga long pero en realidad usen int internamente, es imposible saber sin tener el código fuente del SO).
Eternal Idol:
long es muchas veces 4 bytes.
http://en.wikipedia.org/wiki/Integer_(computer_science)
GetFileSizeEx en Windows.
maxstepin:
--- Cita de: "m0skit0" ---Todo depende del sistema operativo y del sistema de ficheros. Hay sistemas de ficheros que no soportan ficheros de más de 2 GB o más de 4 GB... Esto implica que, aunque ftell() en el estándar POSIX devuelva long, es probable que sistemas que no cumplan el estándar 100% no devuelvan long (o ponga long pero en realidad usen int internamente, es imposible saber sin tener el código fuente del SO).
--- Fin de la cita ---
perdona, no especifique. OS: windows 7 x86, compilador: Mingw32.
sistema de archivos: NTFS, si hay archivos de 8 GB (tranquilamente) en este sistema de ficheros, fseek deberia funcionar correctamente tambien, no? o a lo mejor el problema es ftell?
igual, en mi sistema un long pesa lo mismo que un int (?), no deberia ser de 8 bytes?
la funcion de la API, GetFileSizeEx, solo funcionara en sistemas windows, pero que funcion de libreria estandar me puede ayudar?, ya sabes por lo de la portabilidad.
saludos :comp:
m0skit0:
--- Cita de: "maxstepin" ---la funcion de la API, GetFileSizeEx, solo funcionara en sistemas windows, pero que funcion de libreria estandar me puede ayudar?
--- Fin de la cita ---
Ya te digo que Windows no cumple los estándares, así que si programas para Windows, mejor olvídate de la portabilidad.
Navegación
[#] Página Siguiente
Ir a la versión completa