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

履歴 編集

class
<filesystem>

std::filesystem::path::iterator(C++17)

namespace std::filesystem {
  class path::iterator;
}

概要

iteratorは、pathクラスが保持する汎用フォーマットのパス文字列を、ディレクトリ区切りで走査するイテレータである。

  • イテレータが指す値の型value_typepath
  • このイテレータは、双方向イテレータの要件を満たす
  • pathオブジェクトに対して非constメンバ関数を呼び出すと、全てのイテレータと要素への参照が無効となる

汎用フォーマットのパス名に対して、このイテレータは以下の順に横断する:

  • ルート名要素 (含まれていれば)
  • ルートディレクトリ要素 (含まれていれば)
  • ファイル名まで各要素を進ませる (含まれていれば)
  • 末尾に非ルートのディレクトリ区切り文字があれば空要素として走査する

後方の横断 (backward traversal) は、前方横断 (forward traversal) の逆順に進む。

POSIXベースシステムでの例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  fs::path p = "/usr/bin/clang";

  for (fs::path element : p) {
    std::cout << element << std::endl;
  }
  std::cout << std::endl;

  // 複数の連続したスラッシュはひとつとみなされる
  fs::path p2 = "a////b";
  for (fs::path element : p2) {
    std::cout << element << std::endl;
  }
}

出力

"/"
"usr"
"bin"
"clang"

"a"
"b"

Windowsでの例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  fs::path p = "C:/Program Files/a.txt";

  for (fs::path element : p) {
    std::cout << element << std::endl;
  }
}

出力

"C:"
"/"
"Program Files"
"a.txt"

パスの最後がディレクトリ区切り文字の場合の例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  fs::path p = "/a/b/c/";

  for (const fs::path& element : p) {
    std::cout << element << std::endl;
  }
}

出力

"/"
"a"
"b"
"c"
""

バージョン

言語

  • C++17

処理系

関連項目