namespace std::filesystem {
void resize_file(const path& p, std::uintmax_t new_size); // (1)
void resize_file(const path& p, std::uintmax_t new_size, std::error_code& ec) noexcept; // (2)
}
概要
ファイルサイズを変更する。
効果
- ファイル
p
の大きさを、new_size
バイトに変更する。- POSIX環境では、
truncate()
関数を使用する
- POSIX環境では、
例外
- (1) : ファイルシステムがエラーを報告する場合がある。それに加えて、ファイルが存在しない場合はエラーである。エラーが発生した場合は、
std::filesystem::filesystem_error
例外を送出する - (2) : 投げない
備考
- POSIX環境では、ファイルサイズを縮小する場合は末尾のデータが切り詰められる。ファイルサイズを伸長する場合は延ばした領域がヌルバイト (
'\0'
) で埋められる - 通常ファイル (とそのファイルへのシンボリックリンク) 以外に対してこの関数を実行した場合の動作は未規定
例
#include <cassert>
#include <fstream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
// 4バイトのファイルを作る
{
std::ofstream file{"regular.txt", std::ios::binary};
std::uint32_t value = 42;
file.write(reinterpret_cast<char*>(&value), sizeof(value));
}
// 8バイトに伸長
fs::resize_file("regular.txt", 8);
assert(fs::file_size("regular.txt") == 8);
// 4バイトに縮小
fs::resize_file("regular.txt", 4);
assert(fs::file_size("regular.txt") == 4);
}
出力
バージョン
言語
- C++17
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++: