Namespaces
Variants

std::filesystem:: perm_options

From cppreference.net
Определено в заголовочном файле <filesystem>
enum class perm_options {

replace = /* unspecified */ ,
add = /* unspecified */ ,
remove = /* unspecified */ ,
nofollow = /* unspecified */

} ;
(начиная с C++17)

Этот тип представляет доступные опции, которые управляют поведением функции std::filesystem::permissions() .

perm_options удовлетворяет требованиям BitmaskType (что означает, что побитовые операторы operator & , operator | , operator ^ , operator~ , operator & = , operator | = и operator ^ = определены для этого типа).

Константы-члены

Не более одного из add , remove , replace может присутствовать, иначе поведение функции permissions не определено.

Перечислитель Значение
replace права доступа будут полностью заменены аргументом функции permissions() (поведение по умолчанию)
add права доступа будут заменены побитовым ИЛИ аргумента и текущих прав доступа
remove права доступа будут заменены побитовым И отрицания аргумента и текущих прав доступа
nofollow права доступа будут изменены на самой символьной ссылке, а не на файле, на который она указывает

Пример

#include <filesystem>
#include <fstream>
#include <iostream>
void demo_perms(std::filesystem::perms p)
{
    using std::filesystem::perms;
    auto show = [=](char op, perms perm)
    {
        std::cout << (perms::none == (perm & p) ? '-' : op);
    };
    show('r', perms::owner_read);
    show('w', perms::owner_write);
    show('x', perms::owner_exec);
    show('r', perms::group_read);
    show('w', perms::group_write);
    show('x', perms::group_exec);
    show('r', perms::others_read);
    show('w', perms::others_write);
    show('x', perms::others_exec);
    std::cout << '\n';
}
int main()
{
    std::ofstream("test.txt"); // create file
    std::cout << "Created file with permissions: ";
    demo_perms(std::filesystem::status("test.txt").permissions());
    std::filesystem::permissions(
        "test.txt",
        std::filesystem::perms::owner_all | std::filesystem::perms::group_all,
        std::filesystem::perm_options::add
    );
    std::cout << "After adding u+rwx and g+rwx:  ";
    demo_perms(std::filesystem::status("test.txt").permissions());
    std::filesystem::remove("test.txt");
}

Возможный вывод:

Created file with permissions: rw-r--r--
After adding u+rwx and g+wrx:  rwxrwxr--

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

изменяет права доступа к файлу
(функция)
(C++17)
идентифицирует права файловой системы
(перечисление)