Festlegen von Datei-Berechtigungen beim öffnen einer Datei mit ofstream
Gibt es eine Möglichkeit in C++ - standard-Bibliotheken (oder linux sys/stat.h, sys/types.h, sys/.... Bibliotheken), um den Datei-Berechtigungen für eine Datei erstellen, wenn es mit ofstream
(oder etwas anderes aus diesen Bibliotheken)?
Wenn ich eine Datei erstellen, es wird mit einigen Standard-Satz von Datei-Berechtigungen (ich nehme auch immer den aktuellen umask
ist), aber ich möchte explizit die Berechtigungen setzen, um etwas anderes als die Standardeinstellung (ex. 600
), und ich kann nicht setzen Sie einfach die umask vor dem starten des Programms (b/c, andere, die es ausgeführt wird).
//Example of creating a file by writing to it
ofstream fp(filename.c_str())
/* write something to it */
Gibt es eine Möglichkeit in C++ oder wenn nicht, eine Möglichkeit, die umask
im C++ - Programm?
Beispielsweise in C standard-Bibliothek, die Sie kann nur tun:
open(filename, O_RDWR|O_CREAT, 0666)
aber ich will nicht zu greifen, um die Verwendung der C-Funktion, wie es wäre schön, in der Lage sein, um die Funktionen verwenden, die im Zusammenhang mit fstream
Objekte.
(Randnotiz: es war ein Frage, dessen Titel war genau das, was ich gesucht hatte, aber es stellte sich heraus, um nichts zu tun.)
- Nein, C++ ist nicht bekannt-Datei Berechtigungen. (Erstellen Sie zuerst die Datei über system, Funktion(en) und öffnen Sie die C++ - stream)
- Meinst du etwas wie das öffnen der Datei mit C
open
- Funktion, schließen Sie, dass Datei-Deskriptor, dann öffnen Sie es wieder mitofstream
? - Es ist die experimentelle Filesystem-library TS
- wer hätte geahnt? In 2015 haben wir uns schließlich klar, wir brauchen einen Weg, um erstellen oder Lesen Verzeichnis in C++ 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht. Die standard-Bibliothek werden müssen Plattform-agnostisch und Berechtigungen wie
0600
sind bedeutungslos, unter Windows zum Beispiel. Wenn Sie verwenden möchten, Plattform-spezifische features, die Sie verwenden müssen Plattform-spezifische APIs. Natürlich, Sie können immer rufen Sieumask()
bevor Sie die Datei öffnen, aber das ist nicht Teil der C++ - standard-Bibliothek, es ist ein Teil der Plattform-API.Hinweis:
open()
ist nicht Teil der C-standard-Bibliothek entweder. Es ist eine Plattform-API. Der C-standard-Bibliothek-Funktion, eine Datei zu öffnen, istfopen()
.In C++17,
std::filesystem::permissions
eingeführt wurde. Es wird Ihnen ermöglichen, zu erhalten und setzen Sie die Berechtigungen in eine Plattform-unabhängige Art und Weise.Bekommen Berechtigungen:
Legen Sie die Berechtigungen einfügen (alle Berechtigungen für Besitzer und Gruppe, hinzufügen, Modi 0x770 auf unix):
Beispiel basiert auf einem Beispiel aus cppreference.