Obtenir la taille du fichier en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction std::filesystem::file_size pour obtenir la taille des fichiers en C++
  2. Utilisez std::filesystem::file_size avec std::filesystem::path pour obtenir la taille du fichier en C++
  3. Utilisez std::filesystem::file_size avec error_code pour obtenir la taille du fichier en C++
  4. Utiliser la fonction stat pour obtenir la taille du fichier en C++
Obtenir la taille du fichier en C++

Cet article présentera plusieurs méthodes pour obtenir la taille des fichiers en C++.

Utilisez la fonction std::filesystem::file_size pour obtenir la taille des fichiers en C++

std::filesystem::file_size est la fonction de la bibliothèque du système de fichiers C++ qui récupère la taille du fichier en octets. La fonction std::filesystem::file_size prend le chemin du fichier comme argument de la fonction, qui est de type std::filesystem::path. Dans l’exemple suivant, cependant, nous passons la valeur string du chemin du fichier, qui est ensuite utilisée pour construire l’objet correspondant et récupérer la taille du fichier.

#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;
}

Production :

size of file 'inbox.txt' = 10440

Utilisez std::filesystem::file_size avec std::filesystem::path pour obtenir la taille du fichier en C++

Une autre utilisation de la fonction std::filesystem::file_size consiste à insérer la valeur du chemin d’accès au fichier comme variable de type path. Au début, vous devez inclure l’instruction using std::filesystem::path avant d’utiliser le type. Ensuite, nous pouvons déclarer l’objet path, comme montré dans l’exemple de code suivant, et l’initialiser avec une chaîne de caractères littérale. La variable construite est passée à la fonction file_size pour obtenir la taille du fichier.

#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;
}

Production :

size of file 'inbox.txt' = 10440

Utilisez std::filesystem::file_size avec error_code pour obtenir la taille du fichier en C++

Puisque std::filesystem::file_size utilise les services sous-jacents du système d’exploitation pour récupérer la taille du fichier, il y a de bonnes chances que cela échoue, ce qui soulève quelques exceptions. Pour mieux gérer chaque appel de fonction file_size, il est recommandé d’utiliser l’objet error_code comme second argument et de stocker le message d’erreur en cas d’échec. Par conséquent, nous pouvons évaluer l’objet error_code et implémenter le code de gestion des erreurs en utilisant les instructions 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;
}

Production :

size of file 'inbox.txt' = 10440

Utiliser la fonction stat pour obtenir la taille du fichier en C++

La fonction POSIX est disponible sur plusieurs systèmes d’exploitation. C’est souvent la fonction que la méthode std::filesystem::file_size sous le capot. La fonction stat prend une chaîne de caractères comme premier argument pour indiquer le chemin de l’adresse du fichier de l’objet de type struct stat comme deuxième argument.

La struct stat est un objet spécial prédéfini qui stocke plusieurs paramètres de fichier après l’appel réussi de la fonction stat. Notez que nous avons seulement besoin d’accéder au membre de données st_size de l’objet struct stat, qui stocke la taille du fichier en nombre d’octets.

#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;
}

Production :

size of file 'inbox.txt' = 10440
Auteur: 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

Article connexe - C++ File