名前空間
変種
操作

std::filesystem::perm_options

提供: cppreference.com
 
 
 
ヘッダ <filesystem> で定義
enum class perm_options {

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

};
(C++17以上)

この型は関数 permissions() の動作を制御するための利用可能なオプションを表します。

perm_optionsBitmaskType の要件を満たします (つまり、この型に対してビット単位の演算子 operator&, operator|, operator^, operator~, operator&=, operator|=, operator^= が定義されます)。

[編集] メンバ定数

add, remove, replace のうち高々1つのみを指定してもよく、そうでなければ permissions 関数の動作は未定義です。

メンバ定数 意味
replace パーミッションは permissions() の引数で完全に置き換えられます (デフォルトの動作)
add パーミッションは引数と現在のパーミッションのビット単位の論理和で置き換えられます
remove パーミッションは引数の否定と現在のパーミッションのビット単位の論理積で置き換えられます
nofollow パーミッションの変更はシンボリックリンクの解決先のファイルではなくシンボリックリンク自体に対して行われます

[編集]

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

出力例:

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

[編集] 関連項目

ファイルアクセスパーミッションを変更します
(関数) [edit]
(C++17)
ファイルシステムのパーミッションを表します
(列挙) [edit]