C ++ 17 std::filesystem
, dosyalar ve dizinler üzerinde birçok görevi kolaylaştıran bir özelliktir. Sadece dosya boyutunu ve özniteliklerini hızlı bir şekilde almakla kalmaz, aynı zamanda yeni dizinler oluşturabilir, dosyalar arasında yineleme yapabilir, yol nesneleriyle çalışabilirsiniz.
Yeni kütüphane bize kullanabileceğimiz iki işlev veriyor:
std::uintmax_t std::filesystem::file_size( const std::filesystem::path& p );
std::uintmax_t std::filesystem::directory_entry::file_size() const;
İlk işlev serbest bir işlev std::filesystem
, ikincisi ise bir yöntemdir directory_entry
.
Her yöntemin ayrıca bir istisna atabileceği veya bir hata kodu (bir çıkış parametresi aracılığıyla) döndürebileceği için bir aşırı yükü vardır. Aşağıda, tüm olası durumları açıklayan ayrıntı kodu verilmiştir.
#include <chrono>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main(int argc, char* argv[])
{
try
{
const auto fsize = fs::file_size("a.out");
std::cout << fsize << '\n';
}
catch (const fs::filesystem_error& err)
{
std::cerr << "filesystem error! " << err.what() << '\n';
if (!err.path1().empty())
std::cerr << "path1: " << err.path1().string() << '\n';
if (!err.path2().empty())
std::cerr << "path2: " << err.path2().string() << '\n';
}
catch (const std::exception& ex)
{
std::cerr << "general exception: " << ex.what() << '\n';
}
std::error_code ec{};
auto size = std::filesystem::file_size("a.out", ec);
if (ec == std::error_code{})
std::cout << "size: " << size << '\n';
else
std::cout << "error when accessing test file, size is: "
<< size << " message: " << ec.message() << '\n';
}