Класс 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,
который возвращает путь элемента каталога