std::basic_filebuf<CharT,Traits>:: open
|
basic_filebuf
*
open
(
const
char
*
s,
std::
ios_base
::
openmode
mode
)
;
|
(1) | |
|
basic_filebuf
*
open
(
const
std::
string
&
str,
std::
ios_base
::
openmode
mode
)
;
|
(2) | (seit C++11) |
|
basic_filebuf
*
open
(
const
std::
filesystem
::
path
&
p,
std:: ios_base :: openmode mode ) ; |
(3) | (seit C++17) |
|
basic_filebuf
*
open
(
const
std
::
filesystem
::
path
::
value_type
*
s,
std:: ios_base :: openmode mode ) ; |
(4) | (seit C++17) |
Wenn die zugehörige Datei bereits geöffnet war ( is_open ( ) ! = false ), wird sofort ein Nullzeiger zurückgegeben.
Andernfalls öffnet die Datei mit dem gegebenen Namen ( s , p. c_str ( ) (seit C++17) oder str. c_str ( ) , abhängig von der Überladung). std::ios_base::openmode Werte können geschrieben werden als z.B. std:: ios_base :: out | std:: ios_base :: app .
|
Überladung
(4)
wird nur bereitgestellt, wenn
|
(since C++17) |
Die Datei wird geöffnet, als ob durch Aufruf von
std::fopen
mit dem zweiten Argument (Dateizugriffsmodus), bestimmt durch das Ergebnis von
mode
&
~
std::
ios_base
::
ate
wie folgt,
open()
schlägt fehl, wenn das Ergebnis nicht eine Kombination der in der Tabelle gezeigten Flags ist:
| mode & ~ std:: ios_base :: ate |
std::fopen
Zugriffsmodus Modus |
Aktion bei bestehender Datei | Aktion bei nicht existierender Datei | |||||
|---|---|---|---|---|---|---|---|---|
| binary | in | out | trunc | app |
noreplace
(seit C++23) |
|||
| - | + | - | - | - | - | "r" | Lesen vom Anfang | Fehler beim Öffnen |
| + | + | - | - | - | - | "rb" | ||
| - | + | + | - | - | - | "r+" | Fehler | |
| + | + | + | - | - | - | "r+b" | ||
| - | - | + | - | - | - | "w" | Inhalt zerstören | Neu erstellen |
| - | - | + | + | - | - | |||
| + | - | + | - | - | - | "wb" | ||
| + | - | + | + | - | - | |||
| - | + | + | + | - | - | "w+" | ||
| + | + | + | + | - | - | "w+b" | ||
| - | - | + | - | - | + | "wx" | Fehler beim Öffnen | Neue Datei erstellen |
| - | - | + | + | - | + | |||
| + | - | + | - | - | + | "wbx" | ||
| + | - | + | + | - | + | |||
| - | + | + | + | - | + | "w+x" | ||
| + | + | + | + | - | + | "w+bx" | ||
| - | - | + | - | + | - | "a" | Am Ende schreiben | Neu erstellen |
| - | - | - | - | + | - | |||
| + | - | + | - | + | - | "ab" | ||
| + | - | - | - | + | - | |||
| - | + | + | - | + | - | "a+" | ||
| - | + | - | - | + | - | |||
| + | + | + | - | + | - | "a+b" | ||
| + | + | - | - | + | - | |||
Wenn der Öffnungsvorgang erfolgreich ist und
(
openmode
&
std::
ios_base
::
ate
)
!
=
0
(das
ate
-Bit gesetzt ist), positioniert es die Dateiposition ans Ende der Datei, als ob durch Aufruf von
std::
fseek
(
file,
0
,
SEEK_END
)
, wobei
file
der Zeiger ist, der durch Aufruf von
std::fopen
zurückgegeben wird. Wenn das Repositionieren fehlschlägt, ruft es
close()
auf und gibt einen Nullzeiger zurück, um das Scheitern anzuzeigen.
Inhaltsverzeichnis |
Parameter
| s, str, p | - | der zu öffnende Dateiname; s muss auf einen nullterminierten String zeigen |
| openmode | - | der Dateiöffnungsmodus, eine bitweise ODER-Verknüpfung der std::ios_base::openmode Modi |
Rückgabewert
this bei Erfolg, ein Nullzeiger bei Fehlschlag.
Hinweise
open()
wird typischerweise über den Konstruktor oder die
open()
-Memberfunktion von
std::basic_fstream
aufgerufen.
Beispiel
#include <fstream> #include <iostream> int main() { std::string filename = "Test.b"; std::filebuf fb; // Datei zum Lesen vorbereiten double d = 3.14; if (!fb.open(filename, std::ios::binary | std::ios::out)) { std::cout << "Öffnen der Datei " << filename << " zum Schreiben fehlgeschlagen\n"; return 1; } fb.sputn(reinterpret_cast<char*>(&d), sizeof d); fb.close(); // Datei zum Lesen öffnen double d2 = 0.0; if (!fb.open(filename, std::ios::binary | std::ios::in)) { std::cout << "Öffnen der Datei " << filename << " zum Lesen fehlgeschlagen\n"; return 1; } auto got = fb.sgetn(reinterpret_cast<char*>(&d2), sizeof d2); if (sizeof(d2) != got) std::cout << "Lesen von " << filename << " fehlgeschlagen\n"; else std::cout << "Aus Datei zurückgelesen: " << d2 << '\n'; }
Ausgabe:
Aus Datei zurückgelesen: 3.14
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 596 | C++98 |
open()
konnte Dateien nicht im Anfügemodus öffnen
|
kann im Anfügemodus geöffnet werden |
Siehe auch
|
prüft, ob die zugehörige Datei geöffnet ist
(öffentliche Elementfunktion) |
|
|
leert den Put-Bereich-Puffer und schließt die zugehörige Datei
(öffentliche Elementfunktion) |