Dateigröße in C++ ermitteln
-
Verwenden Sie die Funktion
std::filesystem::file_size
, um die Dateigröße in C++ zu ermitteln -
Verwendung von
std::filesystem::file_size
mitstd::filesystem::path
zum Abrufen der Dateigröße in C++ -
Verwenden von
std::filesystem::file_size
miterror_code
zum Ermitteln der Dateigröße in C++ -
Verwenden der Funktion
stat
zum Ermitteln der Dateigröße in C++
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
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