Namespaces
Variants

std::basic_filebuf<CharT,Traits>:: open

From cppreference.net
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 std::filesystem::path::value_type n'est pas char .

(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 :

Note: Le texte à traduire dans ce fragment HTML se limite aux symboles "+" et "-", qui sont des indicateurs visuels standard (positif/négatif) et ne nécessitent pas de traduction. Le texte dans la balise ` ` (ici "rb") est préservé conformément aux instructions. **Note:** Le texte à traduire dans ce fragment HTML se limite aux symboles "+" et "-" dans les cellules du tableau. Cependant, ces symboles sont universellement compris dans ce contexte (indiquant présence/absence ou positif/négatif) et ne nécessitent généralement pas de traduction en français. Le code C++ `"r+b"` est correctement préservé comme demandé. **Note:** Aucune traduction n'était nécessaire dans ce fragment HTML car : - Les symboles "+" et "-" sont universels et ne nécessitent pas de traduction - Le texte dans les balises ` ` est préservé tel quel (conformément à la consigne de ne pas traduire le contenu des balises ` ` et équivalentes) - Aucun autre texte en langage naturel n'était présent à traduire **Note:** Le contenu à traduire dans ce fragment HTML est limité aux symboles "+" et "-" dans les cellules du tableau. Cependant, ces symboles sont utilisés dans un contexte technique (probablement pour indiquer la compatibilité ou le support) et sont généralement laissés tels quels dans les traductions techniques pour maintenir la cohérence. Le code C++ `"a+b"` a été préservé comme demandé.
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)