cpp/filesystem/file size
[править] std::filesystem::file_size
Определено в заголовке <filesystem>
std::uintmax_t file_size( const std::filesystem::path& p ); (1)(начиная c C++17)
std::uintmax_t file_size( const std::filesystem::path& p,std::error_code& ec ) noexcept; (2)(начиная с С++17)
Если файла по пути p не существует, сообщает об ошибке.
Для обычного файла p, возвращает размер, определенный как будто при чтении st_size члена структуры, полученной POSIX stat.
Результат попытки определить размер каталога (а также любого другого файла, который не является обычным файлом или символической ссылкой) определяется реализацией.
Не выбрасывающая перегрузка возвращает static_cast <std::uintmax_t> (-1) по ошибкам.
Параметры
p- путь к файлу
ЕС- выходной параметр для сообщения об ошибках при не выбрасывающей перегрузке
Возвращаемое значение
Размер файла в байтах.
Исключения
Любая не отмеченная перегрузка no except может вызвать std::bad_alloc в случае сбоя выделения памяти. 1)Вызывает std::filesystem::filesystem_error при ошибках API базовой ОС, созданный с помощью p в качестве первого аргумента пути и код ошибки ОС в качестве аргумента кода ошибки.
2)Устанавливает std::error_code& параметр для кода ошибки OS API, если вызов OS API завершается неудачно и выполняется ec.clear() если ошибок не будет.
Пример
#include <iostream> #include <filesystem> //Обязательно для использования функции file_size определяющей размер файла доступно для стандарта с++ 2017 #include <fstream> #include <string> int main() { std::string file_name = "size_file.txt"; std::filesystem::path file_path( std::filesystem::temp_directory_path().string() + std::filesystem::path::preferred_separator + file_name); std::ofstream(file_path).put('A'); std::cout << "File size = " << std::filesystem::file_size(file_path) << " byte" << '\n'; std::filesystem::remove( std::filesystem::temp_directory_path().string() + std::filesystem::path::preferred_separator + file_name); return 0; }
Результат
File size = 1 byte