std::filesystem::resize_file
From cppreference.com
< cpp | filesystem
| ヘッダー <filesystem> で定義 |
||
| void resize_file( const std::filesystem::path& p, std::uintmax_t new_size ); |
(1) | (C++17以降) |
| void resize_file( const std::filesystem::path& p, std::uintmax_t new_size, |
(2) | (C++17以降) |
p で名前が付けられた通常のファイルのサイズを、POSIX の truncate を呼び出したかのように変更します。以前のファイルサイズが new_size より大きい場合、ファイルの残りの部分は破棄されます。以前のファイルサイズが new_size より小さい場合、ファイルサイズは増加し、新しい領域はゼロで埋められたかのように表示されます。
目次 |
[編集] パラメータ
| p | - | リサイズするパス |
| new_size | - | ファイルが持つことになるサイズ |
| エラーコード | - | 例外を投げないオーバーロードでのエラー報告のための出力パラメータ |
[編集] 戻り値
(なし)
[編集] 例外
noexcept とマークされていないオーバーロードは、メモリ割り当てが失敗した場合に std::bad_alloc をスローする可能性があります。
1) 基盤となるOS APIエラーが発生した場合、最初のパス引数としてp、エラーコード引数としてOSのエラーコードとともに構築されたstd::filesystem::filesystem_error を投げます。
[編集] 注記
スパースファイルをサポートするシステムでは、ファイルサイズを増加させても、ファイルシステム上の占有スペースは増加しません。スペースの割り当ては、ゼロ以外のバイトがファイルに書き込まれた場合にのみ行われます。
[編集] 例
スパースファイルを作成したことが、空きスペースに与える影響を示します。
このコードを実行
#include <filesystem> #include <fstream> #include <iostream> #include <locale> int main() { auto p = std::filesystem::temp_directory_path() / "example.bin"; std::ofstream{p}.put('a'); std::cout.imbue(std::locale{"en_US.UTF8"}); std::cout << "File size: " << std::filesystem::file_size(p) << '\n' << "Free space: " << std::filesystem::space(p).free << '\n'; std::filesystem::resize_file(p, 64*1024); // resize to 64 KB std::cout << "File size: " << std::filesystem::file_size(p) << '\n' << "Free space: " << std::filesystem::space(p).free << '\n'; std::filesystem::remove(p); }
実行結果の例
File size: 1 Free space: 42,954,108,928 File size: 65,536 Free space: 42,954,108,928
[編集] 関連項目
| (C++17) |
ファイルのサイズを返す (関数) |
| (C++17) |
ファイルシステム上の利用可能な空き容量を決定する (関数) |