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) | (depuis C++11) |
|
basic_filebuf
*
open
(
const
std::
filesystem
::
path
&
p,
std:: ios_base :: openmode mode ) ; |
(3) | (depuis C++17) |
|
basic_filebuf
*
open
(
const
std
::
filesystem
::
path
::
value_type
*
s,
std:: ios_base :: openmode mode ) ; |
(4) | (depuis C++17) |
Si le fichier associé était déjà ouvert ( is_open ( ) ! = false ), retourne immédiatement un pointeur nul.
Sinon, ouvre le fichier avec le nom donné ( s , p. c_str ( ) (depuis C++17) ou str. c_str ( ) , selon la surcharge). Les valeurs std::ios_base::openmode peuvent être écrites comme, par exemple, std:: ios_base :: out | std:: ios_base :: app .
|
La surcharge
(4)
est uniquement fournie si
|
(depuis C++17) |
Le fichier est ouvert comme s'il était appelé par
std::fopen
avec le deuxième argument (mode d'accès au fichier) déterminé par le résultat de
mode
&
~
std::
ios_base
::
ate
comme suit,
open()
échoue si le résultat n'est pas une combinaison des drapeaux indiqués dans le tableau :
| mode & ~ std:: ios_base :: ate |
std::fopen
mode d'accès |
Action si le fichier existe déjà | Action si le fichier n'existe pas | |||||
|---|---|---|---|---|---|---|---|---|
| binary | in | out | trunc | app |
noreplace
(depuis C++23) |
|||
| - | + | - | - | - | - | "r" | Lecture depuis le début | Échec d'ouverture |
| + | + | - | - | - | - | "rb" | ||
| - | + | + | - | - | - | "r+" | Erreur | |
| + | + | + | - | - | - | "r+b" | ||
| - | - | + | - | - | - | "w" | Détruire le contenu | Créer nouveau |
| - | - | + | + | - | - | |||
| + | - | + | - | - | - | "wb" | ||
| + | - | + | + | - | - | |||
| - | + | + | + | - | - | "w+" | ||
| + | + | + | + | - | - | "w+b" | ||
| - | - | + | - | - | + | "wx" | Échec d'ouverture | Créer nouveau |
| - | - | + | + | - | + | |||
| + | - | + | - | - | + | "wbx" | ||
| + | - | + | + | - | + | |||
| - | + | + | + | - | + | "w+x" | ||
| + | + | + | + | - | + | "w+bx" | ||
| - | - | + | - | + | - | "a" | Écrire à la fin | Créer nouveau |
| - | - | - | - | + | - | |||
| + | - | + | - | + | - | "ab" | ||
| + | - | - | - | + | - | |||
| - | + | + | - | + | - | "a+" | ||
| - | + | - | - | + | - | |||
| + | + | + | - | + | - | "a+b" | ||
| + | + | - | - | + | - | |||
Si l'opération d'ouverture réussit et que
(
openmode
&
std::
ios_base
::
ate
)
!
=
0
(le bit
ate
est défini), repositionne la position du fichier à la fin du fichier, comme en appelant
std::
fseek
(
file,
0
,
SEEK_END
)
, où
file
est le pointeur retourné par l'appel à
std::fopen
. Si le repositionnement échoue, appelle
close()
et retourne un pointeur nul pour indiquer l'échec.
Table des matières |
Paramètres
| s, str, p | - | le nom du fichier à ouvrir ; s doit pointer vers une chaîne de caractères terminée par un caractère nul |
| openmode | - | le mode d'ouverture du fichier, un OU binaire des modes std::ios_base::openmode |
Valeur de retour
this en cas de succès, un pointeur nul en cas d'échec.
Notes
open()
est généralement appelé via le constructeur ou la fonction membre
open()
de
std::basic_fstream
.
Exemple
#include <fstream> #include <iostream> int main() { std::string filename = "Test.b"; std::filebuf fb; // préparer un fichier à lire double d = 3.14; if (!fb.open(filename, std::ios::binary | std::ios::out)) { std::cout << "Échec de l'ouverture du fichier " << filename << " en écriture\n"; return 1; } fb.sputn(reinterpret_cast<char*>(&d), sizeof d); fb.close(); // ouvrir le fichier en lecture double d2 = 0.0; if (!fb.open(filename, std::ios::binary | std::ios::in)) { std::cout << "Échec de l'ouverture du fichier " << filename << " en lecture\n"; return 1; } auto got = fb.sgetn(reinterpret_cast<char*>(&d2), sizeof d2); if (sizeof(d2) != got) std::cout << "Échec de la lecture de " << filename << "\n"; else std::cout << "Lecture depuis le fichier : " << d2 << '\n'; }
Sortie :
Lecture depuis le fichier : 3.14
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 596 | C++98 |
open()
ne pouvait pas ouvrir les fichiers en mode ajout
|
peut ouvrir en mode ajout |
Voir aussi
|
vérifie si le fichier associé est ouvert
(fonction membre publique) |
|
|
vide le tampon de la zone de sortie et ferme le fichier associé
(fonction membre publique) |