Si uso algo como double
para mantener los tamaños de archivo en bytes, esto naturalmente fallará muy pronto, entonces, ¿qué tipo de datos usaría? Hoy en día, un par de TB son comunes, así que me gustaría que el tipo de datos sea capaz de contener un número tan grande.C: ¿Cuál es el tipo de datos correcto para usar para tamaños de archivo en bytes?
Respuesta
Depende de su plataforma. En el sistema Unix, probablemente pueda usar el tipo off_t
. En Windows, es probable que desee utilizar LARGE_INTEGER
. Esos son los tipos utilizados en esos sistemas por la función que devuelve el tamaño del archivo (stat
en Unix, GetFileSize
en Windows).
Si desea un tipo portátil, uint64_t
debe ser lo suficientemente grande.
Después de una sesión rápida de Google, parece que uint64_t es lo que quiero. ¡Gracias! Estoy abrumado por la cantidad de respuestas y el tiempo de respuesta. SO es maravilloso! – EnibMoc1994
@ EnibMoc1994: también puede usar 'long long' o su compañero sin firmar, que se garantiza que serán al menos de 64 bits. – caf
long long
es un favorito Pop :)
size_t es la habitual para filesizes en C, pero el tipo de ella es dependiente de la plataforma (32 bits o 64 bits sin signo int en Windows). Sugeriría __int64 (un int de 64 bits) - debería hacer frente a hasta 138,547,332 terrabytes.
EDITAR: Solo haciendo una comprobación, la API de Windows llame al GetFileSizeEx
para obtener un LARGE_INTEGER, que es un entero de 64 bits con signo. Así que LARGE_INTEGER sería una buena también.
Para el registro, 'size_t' tiene un tamaño de 64 bits en compilaciones de 64 bits. –
No es un 'unsigned int', es un tipo integral sin signo. – paxdiablo
Disculpas, @paxdiablo, en realidad depende de la plataforma como lo implica. En Windows con 32 bits es equivalente a un int sin firmar. La última vez confié en lo que me dice Visual Studio. :) He editado mi respuesta para ser más preciso. Más información aquí: http://en.wikipedia.org/wiki/Size_t –
Hay una función llamada ftello()
que devuelve off_t
.
Con fgetpos()
, necesita una variable fpos_t
- EDITAR: que no es necesariamente un tipo aritmético.
Así que off_t
podría/debería ser adecuado para sus necesidades, y lo mantiene independiente de los tamaños de tipo de datos reales.
Sólo tenga en cuenta que 'ftello' y' off_t' son Posix, no estándar C. –
Si no tiene 'off_t', tampoco tiene' ftello' y no hay forma (portátil) de agrandar el archivo than 'long' ... –
La libc stat
usa off_t
, que es un typedef para un tipo sin signo, de 64 bits de ancho. Eso sería adecuado por un tiempo.
off_t es typedef para larga firma en OS X. –
- 1. ¿Cuál es el tipo MIME correcto para JSON?
- 2. ¿Cuál es el mejor tipo de datos para usar con dinero en C#?
- 3. ¿Cuál es el tipo de mime correcto para servir un archivo .ipa de iPhone?
- 4. ¿Cuál es el tipo de datos correcto que debo usar en este caso?
- 5. ¿Cuál es el tipo MIME correcto para usar en una fuente RSS?
- 6. ¿Cuál es el formato correcto para usar en Fecha/Hora en un archivo XML
- 7. ¿Cuál es el tipo de datos para unix_timestamp (MySQL)?
- 8. El tipo correcto para identificadores en interfaces C
- 9. ¿Cuál es el tipo de datos "átomo"?
- 10. ¿Cuál es el tipo de datos de puntero en c?
- 11. ¿Cuál es el mejor tipo de datos para usar con dinero en la aplicación Java?
- 12. Cuál es el enfoque correcto para el manejo de errores en C++
- 13. ¿Cuál es el término correcto para referirse a una ruta y un nombre de archivo?
- 14. Cuál es el enfoque correcto para devolver códigos de error en C++
- 15. ¿Cuál es el formato correcto para pubdate de feed RSS?
- 16. C++, cómo verificar es la entrada de datos es del tipo de datos correcto
- 17. ¿Cuál es el término correcto para el token '...'?
- 18. TSQL: ¿Cuál es el orden correcto para unir tablas?
- 19. el tipo MIME correcto para JSON?
- 20. Eficiente cola de bytes C para analizar el flujo de bytes para paquetes de mensajes binarios
- 21. ¿Cuál es el enfoque correcto para el manejo de excepciones en iOS?
- 22. ¿Cuál es el enfoque correcto al usar el contenedor STL para el cálculo mediano?
- 23. ¿Cuál es el patrón correcto para implementar el encuadre TCP? ¿Es una pila de filtros?
- 24. ¿Cuál es el tipo de datos para la propiedad de longitud para las matrices de Java?
- 25. ¿Cuál es el tipo de datos más grande para almacenar (e imprimir) un número entero?
- 26. ¿Cuál es el tipo de datos recomendado para el cálculo científico en .Net?
- 27. ¿Cuál es el uso correcto de DataContext.Refresh()?
- 28. ¿Cuál es el formato correcto para django dateTime?
- 29. ¿Cuál es el enfoque correcto para iniciar una aplicación GWT?
- 30. ¿Cuál es el uso correcto de EnsureChildControls()?
+1 por molestarse en preguntar en lugar de solo usar algo falso. :-) Y bienvenido a SO! –