Namespaces
Variants

std::filesystem:: is_regular_file

From cppreference.net
Определено в заголовке <filesystem>
bool is_regular_file ( std:: filesystem :: file_status s ) noexcept ;
(1) (начиная с C++17)
bool is_regular_file ( const std:: filesystem :: path & p ) ;
(2) (начиная с C++17)
bool is_regular_file ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (начиная с C++17)

Проверяет, соответствует ли заданный статус файла или путь обычному файлу.

1) Эквивалентно s. type ( ) == file_type :: regular .
2,3) Эквивалентно is_regular_file ( status ( p ) ) или is_regular_file ( status ( p, ec ) ) соответственно.

Содержание

Параметры

s - статус файла для проверки
p - путь для проверки
ec - код ошибки для сохранения статуса ошибки

Возвращаемое значение

true если файл, указанный в p или если тип, указанный в s относится к обычному файлу, false в противном случае. Перегрузка без генерации исключений возвращает false при возникновении ошибки.

Исключения

Любая перегрузка, не помеченная noexcept , может выбрасывать std::bad_alloc при неудачном выделении памяти.

2,3) Устанавливает параметр std:: error_code & в код ошибки API операционной системы при сбое вызова API ОС, и выполняет ec. clear ( ) если ошибок не возникает.

Примечания

Перегруженная версия с выбросом исключения дополнительно специфицирована для выброса std::filesystem::filesystem_error если status ( p ) выбросит исключение.

Пример

#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;
    // 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");
    fs::create_directory("sandbox/dir");
    std::ofstream{"sandbox/file"}; // create regular file
    fs::create_symlink("file", "sandbox/symlink");
    mkfifo("sandbox/pipe", 0644);
    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, reinterpret_cast<sockaddr*>(&addr), sizeof addr);
    // 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 (prefer std::unique_ptr-based custom deleters)
    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

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

(C++17)
тип файла
(перечисление)
(C++17) (C++17)
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки
(функция)
представляет тип файла и права доступа
(класс)
проверяет, известен ли статус файла
(функция)
проверяет, ссылается ли данный путь на блочное устройство
(функция)
проверяет, ссылается ли данный путь на символьное устройство
(функция)
проверяет, ссылается ли данный путь на каталог
(функция)
(C++17)
проверяет, ссылается ли данный путь на именованный канал
(функция)
(C++17)
проверяет, ссылается ли аргумент на другой файл
(функция)
(C++17)
проверяет, ссылается ли аргумент на именованный IPC-сокет
(функция)
(C++17)
проверяет, ссылается ли аргумент на символьную ссылку
(функция)
(C++17)
проверяет, ссылается ли путь на существующий объект файловой системы
(функция)
проверяет, ссылается ли запись каталога на обычный файл
(публичная функция-член std::filesystem::directory_entry )