Dateigröße in C++ ermitteln

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion std::filesystem::file_size, um die Dateigröße in C++ zu ermitteln
  2. Verwendung von std::filesystem::file_size mit std::filesystem::path zum Abrufen der Dateigröße in C++
  3. Verwenden von std::filesystem::file_size mit error_code zum Ermitteln der Dateigröße in C++
  4. Verwenden der Funktion stat zum Ermitteln der Dateigröße in C++
Dateigröße in C++ ermitteln

Dieser Artikel demonstriert mehrere Methoden, wie man die Dateigröße in C++ ermitteln kann.

Verwenden Sie die Funktion std::filesystem::file_size, um die Dateigröße in C++ zu ermitteln

std::filesystem::file_size ist eine Funktion der C++-Dateisystembibliothek, die die Größe einer Datei in Bytes abfragt. std::filesystem::file_size nimmt den Pfad der Datei als Funktionsargument, der vom Typ std::filesystem::path ist. Im folgenden Beispiel übergeben wir jedoch den String-Wert des Dateipfads, der dann zum Aufbau des entsprechenden Objekts und zum Abrufen der Dateigröße verwendet wird.

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

Ausgabe:

size of file 'inbox.txt' = 10440

Verwendung von std::filesystem::file_size mit std::filesystem::path zum Abrufen der Dateigröße in C++

Eine alternative Verwendung der Funktion std::filesystem::file_size besteht darin, den Wert des Dateipfads als Variable vom Typ path einzufügen. Zunächst müssten Sie die Anweisung using std::filesystem::path einfügen, bevor Sie den Typ verwenden. Als nächstes können wir das Objekt path deklarieren, wie im folgenden Beispielcode gezeigt, und es mit einem String-Literal initialisieren. Die konstruierte Variable wird an die Funktion file_size übergeben, um die Dateigröße zu ermitteln.

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

Ausgabe:

size of file 'inbox.txt' = 10440

Verwenden von std::filesystem::file_size mit error_code zum Ermitteln der Dateigröße in C++

Da std::filesystem::file_size die zugrundeliegenden Dienste des Betriebssystems nutzt, um die Dateigröße zu ermitteln, besteht eine gute Chance, dass die Funktion fehlschlägt und eine Ausnahme auslöst. Um jeden Funktionsaufruf von file_size besser handhaben zu können, empfiehlt es sich, das Objekt error_code als zweites Argument zu verwenden und die Fehlermeldung im Falle eines Fehlers zu speichern. Folglich können wir das error_code-Objekt auswerten und einen Fehlerbehandlungscode mit if...else-Anweisungen implementieren.

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

Ausgabe:

size of file 'inbox.txt' = 10440

Verwenden der Funktion stat zum Ermitteln der Dateigröße in C++

stat ist eine POSIX-konforme Funktion, die auf mehreren Betriebssystemen verfügbar ist. Es ist oft die Funktion, die die Methode std::filesystem::file_size unter der Haube hat. stat nimmt als erstes Argument eine Zeichenkette, die den Pfad der Dateiadresse des Objekts vom Typ struct stat als zweites Argument angibt.

struct stat ist ein spezielles vordefiniertes Objekt, das nach dem erfolgreichen stat-Funktionsaufruf mehrere Dateiparameter speichert. Beachten Sie, dass wir nur auf das Datenelement st_size des Objekts struct stat zugreifen müssen, das die Dateigröße als Anzahl von Bytes speichert.

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

Ausgabe:

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

Verwandter Artikel - C++ File