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 wird die Datei mit dem angegebenen Namen geöffnet (s, p.c_str()(seit C++17) oder str.c_str(), je nach Überladung). std::ios_base::openmode-Werte können wie folgt angegeben werden: std::ios_base::out | std::ios_base::app.
|
Überladung (4) ist nur vorhanden, wenn |
(seit C++17) |
Die Datei wird geöffnet, als ob std::fopen mit dem zweiten Argument (Dateizugriffsmodus) aufgerufen würde, das sich aus dem Ergebnis von mode & ~std::ios_base::ate ergibt, wie folgt. open() schlägt fehl, wenn das Ergebnis keine Kombination der in der Tabelle gezeigten Flags ist.
| mode & ~std::ios_base::ate | std::fopen Zugriff mode |
Aktion, wenn die Datei bereits existiert | Aktion, wenn die Datei nicht existiert | |||||
|---|---|---|---|---|---|---|---|---|
| binary | in | out | trunc | app | noreplace (seit C++23) | |||
| - | + | - | - | - | - | "r" | Lesen vom Anfang | Fehler beim Öffnen |
| + | + | - | - | - | - | "rb" | ||
| - | + | + | - | - | - | "r+" | Fehler | |
| + | + | + | - | - | - | "r+b" | ||
| - | - | + | - | - | - | "w" | Inhalt löschen | Neu erstellen |
| - | - | + | + | - | - | |||
| + | - | + | - | - | - | "wb" | ||
| + | - | + | + | - | - | |||
| - | + | + | + | - | - | "w+" | ||
| + | + | + | + | - | - | "w+b" | ||
| - | - | + | - | - | + | "wx" | Fehler beim Öffnen | Neu erstellen |
| - | - | + | + | - | + | |||
| + | - | + | - | - | + | "wbx" | ||
| + | - | + | + | - | + | |||
| - | + | + | + | - | + | "w+x" | ||
| + | + | + | + | - | + | "w+bx" | ||
| - | - | + | - | + | - | "a" | Schreiben bis zum Ende | Neu erstellen |
| - | - | - | - | + | - | |||
| + | - | + | - | + | - | "ab" | ||
| + | - | - | - | + | - | |||
| - | + | + | - | + | - | "a+" | ||
| - | + | - | - | + | - | |||
| + | + | + | - | + | - | "a+b" | ||
| + | + | - | - | + | - | |||
Wenn die Öffnungsoperation erfolgreich ist und (openmode & std::ios_base::ate) != 0 (das ate-Bit gesetzt ist), wird die Dateiposition an das Ende der Datei verschoben, als ob std::fseek(file, 0, SEEK_END) aufgerufen worden wäre, wobei file der von std::fopen zurückgegebene Zeiger ist. Wenn das Verschieben der Position fehlschlägt, wird close() aufgerufen und ein Nullzeiger zur Anzeige des Fehlers zurückgegeben.
Inhalt |
[edit] Parameter
| s, str, p | - | Der zu öffnende Dateiname; s muss auf einen nullterminierten String zeigen |
| openmode | - | Der Modus zum Öffnen der Datei, eine bitweise OR-Verknüpfung der std::ios_base::openmode-Modi |
[edit] Rückgabewert
this bei Erfolg, ein Nullzeiger bei Fehler.
[edit] Hinweise
open() wird typischerweise über den Konstruktor oder die open()-Memberfunktion von std::basic_fstream aufgerufen.
[edit] Beispiel
#include <fstream> #include <iostream> int main() { std::string filename = "Test.b"; std::filebuf fb; // prepare a file to read double d = 3.14; if (!fb.open(filename, std::ios::binary | std::ios::out)) { std::cout << "Open file " << filename << " for write failed\n"; return 1; } fb.sputn(reinterpret_cast<char*>(&d), sizeof d); fb.close(); // open file for reading double d2 = 0.0; if (!fb.open(filename, std::ios::binary | std::ios::in)) { std::cout << "Open file " << filename << " for read failed\n"; return 1; } auto got = fb.sgetn(reinterpret_cast<char*>(&d2), sizeof d2); if (sizeof(d2) != got) std::cout << "Read of " << filename << " failed\n"; else std::cout << "Read back from file: " << d2 << '\n'; }
Ausgabe
Read back from file: 3.14
[edit] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 596 | C++98 | open() konnte Dateien im Anhängemodus nicht öffnen |
Kann im Anhängemodus öffnen |
[edit] Siehe auch
| prüft, ob die zugeordnete Datei geöffnet ist (public member function) | |
| Leert den Ausgabepuffer und schließt die zugehörige Datei (public member function) |