Namespaces
Variants

std::experimental::filesystem:: permissions

From cppreference.net
Definiert im Header <experimental/filesystem>
void permissions ( const path & p, perms prms ) ;
void permissions ( const path & p, perms prms, error_code & ec ) ;
(Filesystem TS)

Ändert die Zugriffsberechtigungen der Datei, auf die p verweist, wie durch POSIX fchmodat . Symbolischen Links wird gefolgt, wenn prms::resolve_symlinks gesetzt ist.

Die Effekte hängen von prms wie folgt ab:

  • Wenn weder perms :: add_perms noch perms :: remove_perms gesetzt ist, werden die Dateiberechtigungen exakt auf prms & fs :: perms :: mask gesetzt (d.h. jedes gültige Bit von prms wird angewendet).
  • Wenn perms :: add_perms gesetzt ist, werden die Dateiberechtigungen exakt auf status ( p ) . permissions ( ) | ( prms & perms :: mask ) gesetzt (d.h. jedes gültige Bit, das in prms gesetzt, aber nicht in den aktuellen Dateiberechtigungen vorhanden ist, wird zu den Dateiberechtigungen hinzugefügt).
  • Wenn perms :: remove_perms gesetzt ist, werden die Dateiberechtigungen exakt auf status ( p ) . permissions ( ) & ~ ( prms & perms :: mask ) gesetzt (d.h. jedes gültige Bit, das in prms gelöscht, aber in den aktuellen Dateiberechtigungen gesetzt ist, wird in den Dateiberechtigungen gelöscht).
  • Wenn sowohl perms :: add_perms als auch perms :: remove_perms gesetzt sind, tritt ein Fehler auf.

Die nicht werfende Überladung hat bei Fehlern keine spezielle Aktion.

Inhaltsverzeichnis

Parameter

p - zu untersuchender Pfad
prms - festzulegende, hinzuzufügende oder zu entfernende Berechtigungen
ec - Ausgabeparameter für Fehlerberichterstattung in der nicht-werfenden Überladung

Rückgabewert

(keine)

Ausnahmen

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 Spezifikation:
noexcept

Hinweise

Berechtigungen werden möglicherweise nicht unbedingt als Bits implementiert, aber konzeptionell werden sie so behandelt.

Einige Berechtigungsbits werden auf manchen Systemen ignoriert, und das Ändern einiger Bits kann automatisch andere ändern (z.B. auf Plattformen ohne Unterscheidung zwischen Besitzer/Gruppe/Alle, setzt das Setzen eines der drei Schreibbits alle drei).

Beispiel

#include <bitset>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::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"); // Datei erstellen
    std::cout << "Erstellte Datei mit Berechtigungen: ";
    demo_perms(fs::status("test.txt").permissions());
    fs::permissions("test.txt", fs::perms::add_perms |
                                fs::perms::owner_all | fs::perms::group_all);
    std::cout << "Nach Hinzufügen von o+rwx und g+rwx:  ";
    demo_perms(fs::status("test.txt").permissions());
    fs::remove("test.txt");
}

Mögliche Ausgabe:

Erstellte Datei mit Berechtigungen: rw-r--r--
Nach Hinzufügen von o+rwx und g+rwx:  rwxrwxr--

Siehe auch

identifiziert Dateisystemberechtigungen
(enum)
bestimmt Dateiattribute
bestimmt Dateiattribute, überprüft das Symlink-Ziel
(function)