- filesystem[meta header]
- std::filesystem[meta namespace]
- function[meta id-type]
- cpp17[meta cpp]
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)
}
- path[link path.md]
- std::uintmax_t[link /reference/cstdint/uintmax_t.md]
ファイルサイズを取得する。
- ファイルが存在しない、もしくはファイルシステムでエラーが発生した場合、 (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);
}
- fs::file_size[color ff0000]
- std::uint32_t[link /reference/cstdint/uint32_t.md]
- std::uintmax_t[link /reference/cstdint/uintmax_t.md]
- C++17
- Clang: 7.0 [mark verified]
- GCC: 8.1 [mark verified]
- Visual C++: