std::experimental::filesystem::directory_entry:: status, std::experimental::filesystem::directory_entry:: symlink_status
From cppreference.net
<
cpp
|
experimental
|
fs
|
directory entry
|
file_status status
(
)
const
;
file_status status ( error_code & ec ) const ; |
(1) | (filesystem TS) |
|
file_status symlink_status
(
)
const
;
file_status symlink_status ( error_code & ec ) const ; |
(2) | (filesystem TS) |
1)
Возвращает потенциально кэшированный статус записи, как если бы он был определён вызовом
status
(символические ссылки отслеживаются до их целей).
2)
Возвращает потенциально кэшированный статус записи, как если бы он был определён вызовом
symlink_status
(символические ссылки не отслеживаются).
Содержание |
Параметры
| ec | - | выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке |
Возвращаемое значение
Статус файла, на который ссылается запись.
Исключения
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p as the first argument and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept
спецификация:
noexcept
Примечания
Информация о статусе файла обычно предоставляется как побочный продукт итерации по каталогу, в этом случае она кэшируется и может быть получена этими функциями-членами без затрат на дополнительный системный вызов. Во время итерации по каталогу вызов
status
не требуется, и методы доступа, такие как
is_directory
, должны вызываться с кэшированным значением статуса, а не с путем.
Пример
Запустить этот код
#include <cstdio> #include <cstring> #include <experimental/filesystem> #include <fstream> #include <iostream> #include <sys/socket.h> #include <sys/stat.h> #include <sys/un.h> #include <unistd.h> namespace fs = std::experimental::filesystem; void demo_status(const fs::path& p, fs::file_status s) { std::cout << p; // alternative: switch(s.type()) { case fs::file_type::regular: ... } if (fs::is_regular_file(s)) std::cout << " is a regular file\n"; if (fs::is_directory(s)) std::cout << " is a directory\n"; if (fs::is_block_file(s)) std::cout << " is a block device\n"; if (fs::is_character_file(s)) std::cout << " is a character device\n"; if (fs::is_fifo(s)) std::cout << " is a named IPC pipe\n"; if (fs::is_socket(s)) std::cout << " is a named IPC socket\n"; if (fs::is_symlink(s)) std::cout << " is a symlink\n"; if (!fs::exists(s)) std::cout << " does not exist\n"; } int main() { // create files of different kinds fs::create_directory("sandbox"); std::ofstream("sandbox/file"); // create regular file fs::create_directory("sandbox/dir"); mkfifo("sandbox/pipe", 0644); struct sockaddr_un addr; addr.sun_family = AF_UNIX; std::strcpy(addr.sun_path, "sandbox/sock"); int fd = socket(PF_UNIX, SOCK_STREAM, 0); bind(fd, (struct sockaddr*)&addr, sizeof addr); fs::create_symlink("file", "sandbox/symlink"); // demo different status accessors for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it) demo_status(*it, it->symlink_status()); // use cached status from directory entry demo_status("dev/null", fs::status("/dev/null")); // direct calls to status demo_status("dev/sda", fs::status("/dev/sda")); demo_status("sandbox/no", fs::status("/sandbox/no")); // cleanup close(fd); fs::remove_all("sandbox"); }
Возможный вывод:
"sandbox/file" is a regular file "sandbox/dir" is a directory "sandbox/pipe" is a named IPC pipe "sandbox/sock" is a named IPC socket "sandbox/symlink" is a symlink "dev/null" is a character device "dev/sda" is a block device "sandbox/no" does not exist
Смотрите также
|
представляет тип файла и права доступа
(класс) |
|
|
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки (функция) |
|
|
проверяет, известен ли статус файла
(функция) |
|
|
проверяет, ссылается ли данный путь на блочное устройство
(функция) |
|
|
проверяет, ссылается ли данный путь на символьное устройство
(функция) |
|
|
проверяет, ссылается ли данный путь на директорию
(функция) |
|
|
проверяет, ссылается ли данный путь на именованный канал
(функция) |
|
|
проверяет, ссылается ли аргумент на
другой
файл
(функция) |
|
|
проверяет, ссылается ли аргумент на обычный файл
(функция) |
|
|
проверяет, ссылается ли аргумент на именованный IPC-сокет
(функция) |
|
|
проверяет, ссылается ли аргумент на символьную ссылку
(функция) |