Obtener el tamaño del archivo en C++

Jinku Hu 12 octubre 2023
  1. Usar la función std::filesystem::file_size para obtener el tamaño del archivo en C++
  2. Usa std::filesystem::file_size con std::filesystem::path para obtener el tamaño del archivo en C++
  3. Usa std::filesystem::file_size con error_code para obtener el tamaño del fichero en C++
  4. Usar la función stat para obtener el tamaño del archivo en C++
Obtener el tamaño del archivo en C++

Este artículo demostrará múltiples métodos de cómo obtener el tamaño del archivo en C++.

Usar la función std::filesystem::file_size para obtener el tamaño del archivo en C++

std::filesystem::file_size es la función de la biblioteca del sistema de ficheros C++ que recupera el tamaño del fichero en bytes. std::filesystem::file_size toma la ruta del fichero como argumento de la función, que es de tipo std::filesystem::path. En el siguiente ejemplo, sin embargo, pasamos el valor string de la ruta del archivo, que luego se utiliza para construir el objeto correspondiente y recuperar el tamaño del archivo.

#include <filesystem>
#include <fstream>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::ifstream;

int main() {
  string path = "input.txt";

  cout << "size of file '" << path << "' = " << std::filesystem::file_size(path)
       << endl;

  return EXIT_SUCCESS;
}

Producción :

size of file 'inbox.txt' = 10440

Usa std::filesystem::file_size con std::filesystem::path para obtener el tamaño del archivo en C++

El uso alternativo de la función std::filesystem::file_size es insertar el valor de la ruta de archivo como la variable de tipo path. Al principio, necesitarías incluir la declaración using std::filesystem::path antes de usar el tipo. A continuación, podemos declarar el objeto path, como se muestra en el siguiente código de ejemplo, e inicializarlo con un literal de cadena. La variable construida se pasa a la función file_size para obtener el tamaño del archivo.

#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

#include <filesystem>
#include <fstream>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::error_code;
using std::ifstream;
using std::string;
using std::filesystem::path;

int main() {
  class path fd_path = "input.txt";

  cout << "size of file '" << fd_path
       << "' = " << std::filesystem::file_size(fd_path) << endl;

  return EXIT_SUCCESS;
}

Producción :

size of file 'inbox.txt' = 10440

Usa std::filesystem::file_size con error_code para obtener el tamaño del fichero en C++

Dado que std::filesystem::file_size utiliza los servicios subyacentes del sistema operativo para recuperar el tamaño del archivo, hay buenas posibilidades de que falle, lo que plantea alguna excepción. Para manejar mejor cada llamada a la función file_size, se recomienda usar el objeto error_code como segundo argumento y almacenar el mensaje de error en caso de fallo. En consecuencia, podemos evaluar el objeto error_code e implementar el código de manejo de errores usando declaraciones if...else.

#include <filesystem>
#include <fstream>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::error_code;
using std::ifstream;
using std::string;
using std::filesystem::path;

int main() {
  string path = "input.txt";
  error_code ec{};

  auto size = std::filesystem::file_size(path, ec);
  if (ec == error_code{})
    cout << "size of file '" << path << "' = " << size << endl;
  else
    cout << "Error accessing file '" << path << "' message: " << ec.message()
         << endl;

  return EXIT_SUCCESS;
}

Producción :

size of file 'inbox.txt' = 10440

Usar la función stat para obtener el tamaño del archivo en C++

stat es la función compatible con POSIX que está disponible en múltiples sistemas operativos. A menudo es la función que el método std::filesystem::file_size debajo del capó. stat toma la cadena de caracteres como primer argumento para denotar la ruta de la dirección del archivo de tipo struct stat como segundo argumento.

struct stat es un objeto predefinido especial que almacena múltiples parámetros de archivo después de la llamada exitosa a la función stat. Observe que sólo necesitamos acceder al miembro de datos st_size del objeto struct stat, que almacena el tamaño del archivo como un número de bytes.

#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;

int main() {
  string path = "input.txt";
  struct stat sb {};

  if (!stat(path.c_str(), &sb)) {
    cout << "size of file '" << path << "' = " << sb.st_size << endl;
  } else {
    perror("stat");
  }

  return EXIT_SUCCESS;
}

Producción :

size of file 'inbox.txt' = 10440
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ File