Ottieni la dimensione del file in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione std::filesystem::file_size per ottenere la dimensione del file in C++
  2. Usa std::filesystem::file_size con std::filesystem::path per ottenere la dimensione del file in C++
  3. Usa std::filesystem::file_size con error_code per ottenere la dimensione del file in C++
  4. Usa la funzione stat per ottenere la dimensione del file in C++
Ottieni la dimensione del file in C++

Questo articolo illustrerà diversi metodi su come ottenere la dimensione del file in C++.

Usa la funzione std::filesystem::file_size per ottenere la dimensione del file in C++

std::filesystem::file_size è la funzione di libreria del filesystem C++ che recupera la dimensione del file in byte. std::filesystem::file_size prende il percorso del file come argomento della funzione, che è di tipo std::filesystem::path. Nell’esempio seguente, tuttavia, passiamo il valore string del percorso del file, che viene quindi utilizzato per costruire l’oggetto corrispondente e recuperare la dimensione del file.

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

Produzione:

size of file 'inbox.txt' = 10440

Usa std::filesystem::file_size con std::filesystem::path per ottenere la dimensione del file in C++

L’uso alternativo della funzione std::filesystem::file_size consiste nell’inserire il valore del percorso del file come variabile di tipo path. All’inizio, dovresti includere l’istruzione using std::filesystem::path prima di usare il tipo. Successivamente, possiamo dichiarare l’oggetto path, come mostrato nel seguente codice di esempio, e inizializzarlo con una stringa letterale. La variabile costruita viene passata alla funzione file_size per ottenere la dimensione del file.

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

Produzione:

size of file 'inbox.txt' = 10440

Usa std::filesystem::file_size con error_code per ottenere la dimensione del file in C++

Poiché std::filesystem::file_size utilizza i servizi del sistema operativo sottostante per recuperare la dimensione del file, ci sono buone probabilità che possa fallire, sollevando qualche eccezione. Per gestire meglio ogni chiamata di funzione file_size, si consiglia di utilizzare l’oggetto error_code come secondo argomento e memorizzare il messaggio di errore in caso di errore. Di conseguenza, possiamo valutare l’oggetto error_code e implementare il codice di gestione degli errori utilizzando le istruzioni 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;
}

Produzione:

size of file 'inbox.txt' = 10440

Usa la funzione stat per ottenere la dimensione del file in C++

stat è la funzione conforme a POSIX disponibile su più sistemi operativi. Spesso è la funzione che il metodo std::filesystem::file_size sotto il cofano. stat prende una stringa di caratteri come primo argomento per indicare il percorso dell’indirizzo del file dell’oggetto di tipo struct stat come secondo argomento.

struct stat è uno speciale oggetto predefinito che memorizza più parametri di file dopo la chiamata alla funzione stat riuscita. Nota che abbiamo solo bisogno di accedere al membro dati st_size dell’oggetto struct stat, che memorizza la dimensione del file come un numero di byte.

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

Produzione:

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

Articolo correlato - C++ File