Класс directory_iterator
Класс directory_iterator предназначен для
последовательного перебора элементов директории.
Он является итератором и позволяет пройтись по всем
файлам и поддиректориям, содержащимся в указанной
директории. В первом параметре конструктору мы
передаем путь к директории, которую нужно обойти,
а второй параметр (необязательный) задает поведение
при обходе - например, пропуск ошибок доступа.
При разыменовании итератора возвращается объект
directory_entry, через который можно получить
путь, имя файла, расширение и другую информацию
об элементе директории. Итератор становится равным
конечному итератору, когда все элементы перебраны.
Синтаксис
#include <filesystem>
std::filesystem::directory_iterator it(path);
std::filesystem::directory_iterator end;
Пример
Давайте переберем все элементы директории /tmp/test
и выведем путь к каждому из них:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::directory_iterator it("/tmp/test");
fs::directory_iterator end;
for (; it != end; ++it) {
cout << it->path() << endl;
}
return 0;
}
Результат выполнения кода:
"/tmp/test/a.txt"
"/tmp/test/b.txt"
"/tmp/test/subdir"
Пример
Давайте воспользуемся range-based циклом for
для перебора элементов директории и выведем имя
каждого файла через метод filename:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
for (const auto& entry : fs::directory_iterator("/tmp/test")) {
cout << entry.path().filename().string() << endl;
}
return 0;
}
Результат выполнения кода:
"a.txt"
"b.txt"
"subdir"
Пример
Давайте переберем только обычные файлы директории,
пропуская поддиректории, с помощью метода
is_regular_file:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
for (const auto& entry : fs::directory_iterator("/tmp/test")) {
if (entry.is_regular_file()) {
cout << entry.path().filename().string() << endl;
}
}
return 0;
}
Результат выполнения кода:
"a.txt"
"b.txt"
Смотрите также
-
класс
recursive_directory_iterator,
который рекурсивно обходит директорию -
класс
directory_entry,
который представляет элемент директории -
класс
path,
который представляет путь к файлу или директории -
метод
filename,
который возвращает имя файла из пути