Namespaces
Variants

std::experimental::filesystem::directory_entry:: status, std::experimental::filesystem::directory_entry:: symlink_status

From cppreference.net
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-сокет
(функция)
проверяет, ссылается ли аргумент на символьную ссылку
(функция)