РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
512 of 815 menu

Класс directory_entry

Класс directory_entry представляет собой элемент каталога - запись о файле или подкаталоге, полученную в результате обхода директории с помощью directory_iterator или recursive_directory_iterator. Объект этого класса хранит внутри себя объект path, который можно получить с помощью метода path, а также кэшированную информацию о статусе файла: является ли запись обычным файлом, каталогом или символической ссылкой. Кэш статуса можно обновить методом refresh.

Синтаксис

#include <filesystem> std::filesystem::directory_entry entry; std::filesystem::directory_entry entry(path);

Основные методы

Класс directory_entry предоставляет следующие методы:

entry.path() // возвращает путь entry.exists() // проверяет существование entry.is_regular_file() // обычный файл? entry.is_directory() // каталог? entry.is_symlink() // символическая ссылка? entry.file_size() // размер файла entry.last_write_time() // время изменения entry.refresh() // обновить кэш

Пример

Давайте обойдем текущий каталог с помощью directory_iterator и для каждой записи выведем путь и признак того, является ли она каталогом:

#include <iostream> #include <filesystem> using namespace std; namespace fs = std::filesystem; int main() { for (const fs::directory_entry& entry : fs::directory_iterator(".")) { cout << entry.path().string(); if (entry.is_directory()) { cout << " [dir]"; } cout << endl; } return 0; }

Результат выполнения кода:

"./main.cpp" "./build [dir]" "./test.txt"

Пример

Давайте создадим объект directory_entry для конкретного пути ./test.txt и проверим его свойства:

#include <iostream> #include <filesystem> using namespace std; namespace fs = std::filesystem; int main() { fs::directory_entry entry("./test.txt"); cout << "path: " << entry.path().string() << endl; cout << "exists: " << entry.exists() << endl; cout << "regular: " << entry.is_regular_file() << endl; cout << "dir: " << entry.is_directory() << endl; return 0; }

Результат выполнения кода:

"path: ./test.txt" "exists: 1" "regular: 1" "dir: 0"

Пример

Давайте обойдем каталог и выведем только обычные файлы, используя метод is_regular_file:

#include <iostream> #include <filesystem> using namespace std; namespace fs = std::filesystem; int main() { for (const fs::directory_entry& entry : fs::directory_iterator(".")) { if (entry.is_regular_file()) { cout << entry.path().filename().string() << endl; } } return 0; }

Результат выполнения кода:

"main.cpp" "test.txt"

Смотрите также

  • класс path,
    который представляет путь к файлу
  • класс directory_iterator,
    который обходит содержимое каталога
  • класс recursive_directory_iterator,
    который рекурсивно обходит каталоги
  • метод path,
    который возвращает путь элемента каталога
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить