最終更新日時(UTC):
が更新

履歴 編集

function
<filesystem>

std::filesystem::resize_file(C++17)

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()関数を使用する

例外

  • (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

処理系

参照