Ce face std::filesystem::file_size
file_size(p) returnează numărul de octeți din fișierul p. Fișierul nu este deschis și nici citit, deci funcția este rapidă și pentru fișiere mari.
Dacă fișierul nu există sau p este un director, aruncă std::filesystem::filesystem_error. Cu varianta cu std::error_code nu se aruncă nimic: rezultatul este static_cast<std::uintmax_t>(-1), iar eroarea ajunge în ec.
Parametri
| Parametru | Descriere |
|---|---|
p |
Calea fișierului. |
ec |
Opțional: primește eroarea în loc de excepție. |
Ce returnează
Dimensiunea în octeți (std::uintmax_t).
Exemple
Exemplul 1: Mărimea unui fișier scris de program
Caracterele cu diacritice ocupă câte 2 octeți în UTF-8, de aceea „Iași” are 5 octeți.
#include <filesystem>
#include <fstream>
#include <print>
int main() {
namespace fs = std::filesystem;
std::ofstream("oras.txt") << "Iași";
std::ofstream("gol.txt");
std::println("oras.txt: {} octeți", fs::file_size("oras.txt"));
std::println("gol.txt: {} octeți", fs::file_size("gol.txt"));
}
Rezultat
oras.txt: 5 octeți
gol.txt: 0 octeți
Exemplul 2: Fișier inexistent, cu și fără excepție
#include <filesystem>
#include <print>
#include <system_error>
int main() {
namespace fs = std::filesystem;
std::error_code ec;
auto marime = fs::file_size("lipsa.txt", ec);
if (ec) {
std::println("Eroare: {}", ec.message());
} else {
std::println("{} octeți", marime);
}
try {
std::println("{}", fs::file_size("lipsa.txt"));
} catch (const fs::filesystem_error& e) {
std::println("Excepție: {}", e.what());
}
}
Rezultat
Eroare: No such file or directory
Excepție: filesystem error: in file_size: No such file or directory ["lipsa.txt"]
Greșeli frecvente
- Citești tot fișierul doar ca să-i afli mărimea.
file_sizeo returnează direct, fără să citească nimic.
Comenzi înrudite
std::filesystem::exists: Verifică dacă un fișier sau director există pe disc.std::filesystem::directory_iterator: Parcurge fișierele și directoarele dintr-un director; varianta recursive intră și în subdirectoare.std::ifstream: Deschide un fișier pentru citire și îl citește la fel ca pe std::cin.