¿Hay problemas para sistemas operativos específicos que debería conocer?
Hay muchos duplicados ( 1 , 2 , 3 , 4 , 5 ) de esta pregunta, pero fueron respondidos hace décadas. Las respuestas muy votadas en muchas de estas preguntas están equivocadas hoy.
Métodos de otros (antiguos controles de calidad) en .sx
stat.h (envoltorio sprintstatf ), usa syscall
tellg () , devuelve por definición una posición pero no necesariamente bytes . El tipo de devolución no lo es
int
.
c++
c++17
filesize
c++-standard-library
Jonas Stein
fuente
fuente
tellg
problemas similares . El único con el que vale la pena molestarse es el cuarto, y ese no es genial, ya que habla demasiadoofstream
, tanto en la pregunta como en sus respuestas. Este es mucho mejor para expresar la intención que los demás (excepto el primero, que está extrañamente cerrado).stat(2)
todos modos? ¿Ha envejecido demasiado o qué?stat(2)
No es parte del estándar del lenguaje.Respuestas:
<filesystem>
(agregado en C ++ 17) hace que esto sea muy sencillo .Como se señaló en los comentarios, si planea usar esta función para decidir cuántos bytes leer del archivo, tenga en cuenta que ...
fuente
std::uintmax_t
podrá tener valores mayores questd::size_t
? Si no es así, ¿por qué no usarlostd::size_t
, que posiblemente sea más reconocible? +1 en la respuesta, por ciertofile_size
devuelve. A mí también me parece un poco extraño.std::size_t
solo es necesario para contener el tamaño máximo de objetos de memoria. Los archivos pueden ser considerablemente más grandes,size_t
es de 32 bits yuintmax_t
es de 64 bits.C ++ 17 trae lo
std::filesystem
que agiliza muchas tareas en archivos y directorios. No solo puede obtener rápidamente el tamaño del archivo, sus atributos, sino también crear nuevos directorios, iterar a través de archivos, trabajar con objetos de ruta.La nueva biblioteca nos da dos funciones que podemos usar:
La primera función es una función libre en
std::filesystem
, la segunda es un método endirectory_entry
.Cada método también tiene una sobrecarga, ya que puede generar una excepción o devolver un código de error (a través de un parámetro de salida). A continuación se muestra el código detallado que explica todos los casos posibles.
fuente