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

履歴 編集

function
<filesystem>

std::filesystem::directory_iterator::コンストラクタ(C++17)

directory_iterator() noexcept;                         // (1)
explicit directory_iterator(const path& p);            // (2)
directory_iterator(const path& p,
                   directory_options options);         // (3)
directory_iterator(const path& p,
                   std::error_code& ec) noexcept;      // (4)
directory_iterator(const path& p,
                   directory_options options,
                   std::error_code& ec) noexcept;      // (5)
directory_iterator(const directory_iterator& rhs);     // (6)
directory_iterator(directory_iterator&& rhs) noexcept; // (7)

概要

directory_iteratorオブジェクトを構築する。

  • (1) : 終端イテレータを構築する
  • (2), (4) : 指定されたパスのディレクトリを走査するイテレータを構築する
  • (3), (5) : 走査オプション付きで、指定されたパスのディレクトリを走査するイテレータを構築する
  • (6) : コピーコンストラクタ
  • (7) : ムーブコンストラクタ

効果

  • (1) : 終端イテレータを構築する
  • (2), (4) : パスpがディレクトリに解決される場合、そのディレクトリの最初の要素を指すイテレータを構築する。パスpがディレクトリではない場合、終端イテレータを構築する
  • (3), (5) :
    • (2), (4)に加えて、
    • パスpへのアクセスが拒否された場合、optionsとしてdirectory_options::skip_permission_deniedが指定されていれば、エラー報告をせず、終端イテレータを構築する
  • (6) : rhs*thisにコピーする。rhs*thisが同じオブジェクトである場合はなにもしない
  • (7) : rhsの所有権を*thisに移動する。rhs*thisが同じオブジェクトである場合はなにもしない

例外

  • (2), (3) : ファイルシステムがエラーを報告する場合がある。エラーが発生した場合は、std::filesystem::filesystem_error例外を送出する

備考

  • 現在のディレクトリを走査する場合は、directory_iterator("")ではなくdirectory_iterator(".")を使用すること

#include <cassert>
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

int main()
{
  fs::create_directory("dir");
  std::ofstream{"dir/a.txt"};

  // (1) 終端イテレータを構築する
  {
    fs::directory_iterator it;
  }

  // (2) 指定したディレクトリの先頭要素を指すイテレータを構築する
  {
    fs::directory_iterator it{"dir"};
    assert(it->path() == "dir/a.txt");
  }

  // (3) 走査オプション付きで、指定したディレクトリの先頭要素を指すイテレータを構築する
  {
    fs::directory_iterator it{"dir", fs::directory_options::skip_permission_denied};
    assert(it->path() == "dir/a.txt");
  }

  // (4) エラー時 (アクセス拒否された場合) に例外ではなくerror_codeオブジェクトに書き込む
  {
    std::error_code ec;
    fs::directory_iterator it{"dir", ec};
    assert(!ec);
    assert(it->path() == "dir/a.txt");
  }

  // (5) 同上
  {
    std::error_code ec;
    fs::directory_iterator it{"dir", fs::directory_options::skip_permission_denied, ec};
    assert(!ec);
    assert(it->path() == "dir/a.txt");
  }
}

出力

バージョン

言語

  • C++17

処理系