std::filesystem:: file_type
|
Определено в заголовочном файле
<filesystem>
|
||
|
enum
class
file_type
{
none
=
/* unspecified */
,
|
(начиная с C++17) | |
file_type
определяет константы, которые указывают тип файла или каталога, на который ссылается путь. Значения перечислителей являются уникальными.
Константы
| Перечислитель | Значение |
none
|
указывает, что статус файла ещё не был оценён, или произошла ошибка при его оценке |
not_found
|
указывает, что файл не был найден (это не считается ошибкой) |
regular
|
обычный файл |
directory
|
каталог |
symlink
|
символическая ссылка |
block
|
блочное специальное устройство |
character
|
символьное специальное устройство |
fifo
|
FIFO-файл (также известный как pipe) |
socket
|
сокет-файл |
unknown
|
файл существует, но его тип не может быть определён |
| implementation-defined | дополнительные константы, определённые реализацией, для каждого дополнительного типа файлов, поддерживаемого реализацией (например, MSVC STL определяет junction для NTFS junction points ) |
Пример
#include <cstdio> #include <cstring> #include <filesystem> #include <fstream> #include <iostream> #include <sys/socket.h> #include <sys/stat.h> #include <sys/un.h> #include <unistd.h> namespace fs = std::filesystem; void demo_status(const fs::path& p, fs::file_status s) { std::cout << p; switch (s.type()) { case fs::тип_файла::none: std::cout << " имеет тип `not-evaluated-yet`"; break; case fs::тип_файла::не_найдено: std::cout << " не существует"; break; case fs::тип_файла::регулярный: std::cout << " является обычным файлом"; break; case fs::тип_файла::директория: std::cout << " является каталогом"; break; case fs::тип_файла::символическая ссылка: std::cout << " является символической ссылкой"; break; case fs::тип_файла::блок: std::cout << " является блочным устройством"; break; case fs::тип_файла::символ: std::cout << " является символьным устройством"; break; case fs::тип_файла::fifo: std::cout << " является именованным каналом IPC"; break; case fs::тип_файла::сокет: std::cout << " является именованным IPC сокетом"; break; case fs::тип_файла::неизвестный: std::cout << " имеет тип `unknown`"; break; default: std::cout << " имеет тип `implementation-defined`"; break; } std::cout << '\n'; } int main() { // создание файлов различных типов fs::create_directory("песочница"); fs::create_directory("песочница/дир"); std::ofstream{"песочница/файл"}; // создать обычный файл fs::create_symlink("файл", "песочница/символическая ссылка"); mkfifo("песочница/канал", 0644); sockaddr_un addr; addr.sun_family = AF_UNIX; std::strcpy(addr.sun_path, "песочница/сокет"); int fd = socket(PF_UNIX, SOCK_STREAM, 0); bind(fd, reinterpret_cast<sockaddr*>(&addr), sizeof addr); // демонстрация различных методов доступа к статусу for (auto it{fs::directory_iterator("песочница")}; it != fs::directory_iterator(); ++it) demo_status(*it, it->symlink_status()); // использовать кэшированный статус из записи каталога demo_status("/dev/null", fs::статус("/dev/null")); // прямые вызовы к статусу demo_status("/dev/sda", fs::статус("/dev/sda")); demo_status("песочница/нет", fs::статус("/песочница/нет")); // очистка (предпочтительнее использовать пользовательские deleter-ы на основе std::unique_ptr) close(fd); fs::remove_all("песочница"); }
Возможный вывод:
"sandbox/file" является обычным файлом "sandbox/dir" является директорией "sandbox/pipe" является именованным IPC-каналом "sandbox/sock" является именованным IPC-сокетом "sandbox/symlink" является символьной ссылкой "/dev/null" является символьным устройством "/dev/sda" является блочным устройством "sandbox/no" не существует
Смотрите также
|
(C++17)
|
представляет тип файла и права доступа
(класс) |
|
(C++17)
|
проверяет, ссылается ли заданный путь на блочное устройство
(функция) |
|
(C++17)
|
проверяет, ссылается ли заданный путь на символьное устройство
(функция) |
|
(C++17)
|
проверяет, ссылается ли заданный путь на директорию
(функция) |
|
(C++17)
|
проверяет, ссылается ли заданный путь на именованный канал
(функция) |
|
(C++17)
|
проверяет, ссылается ли аргумент на
другой
тип файла
(функция) |
|
(C++17)
|
проверяет, ссылается ли аргумент на именованный IPC-сокет
(функция) |
|
(C++17)
|
проверяет, ссылается ли аргумент на символическую ссылку
(функция) |
|
проверяет, ссылается ли запись директории на обычный файл
(публичная функция-член
std::filesystem::directory_entry
)
|