namespace std::filesystem {
std::uintmax_t file_size(const path& p); // (1)
std::uintmax_t file_size(const path& p, std::error_code& ec) noexcept; // (2)
}
概要
ファイルサイズを取得する。
戻り値
- ファイルが存在しない、もしくはファイルシステムでエラーが発生した場合、 (1) では
std::filesystem::filesystem_error
例外を送出し、 (2) ではec
にエラー情報が設定されてstatic_cast<uintmax_t>(-1)
が返る p
が通常ファイル、もしくは通常ファイルを指すシンボリックリンクである場合、ファイルサイズが返る- POSIX環境では
stat()
関数のst_size
メンバ変数を使用する
- POSIX環境では
p
がそれ以外のファイル種別である場合は、実装定義の動作をする
例外
- (1) : ファイルシステムがエラーを報告する場合がある。それに加えて、指定されたファイルが存在しない場合もエラーである。エラーが発生した場合は、
std::filesystem::filesystem_error
例外を送出する - (2) : 投げない
備考
- libstdc++では、通常ファイル、シンボリックリンク以外のファイル種別はエラー
- ファイルサイズの取得方法として、ファイルの読み込み位置をseekによって末尾に移動するものがあるが、その方法は推奨されていない。本関数を使用すること
例
#include <cassert>
#include <fstream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
{
std::ofstream file{"regular.txt", std::ios::binary};
std::uint32_t value = 42;
file.write(reinterpret_cast<char*>(&value), sizeof(value));
}
std::uintmax_t size = fs::file_size("regular.txt");
assert(size == 4);
}
出力
バージョン
言語
- C++17
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++: