Que signifie ce qui suit en C++ ? 1. ios::out 2. ios::in 3. ios::app 4. ios::binary etc. ?


Intro : L'opération effectuée sur un objet pour l'associer à un fichier réel est appelée ouvrir un fichier. Un fichier ouvert est représenté dans un programme par un flux (c'est-à-dire, un objet d'une de ces classes) et toute opération d'entrée ou de sortie effectuée sur cet objet stream sera appliquée au fichier physique qui lui est associé.

Pour ouvrir un fichier avec un objet stream, nous utilisons sa fonction membre open:


open (filename, mode);

Où filename est une chaîne représentant le nom du fichier à ouvrir, et mode est un paramètre optionnel avec une combinaison des drapeaux suivants:

  • ios::in Open pour les opérations d'entrée.
  • ios::out Ouvrir pour les opérations de sortie.
  • ios::binary Ouvrir en mode binaire.
  • ios::ate Définir la position initiale à la fin du fichier. (Si ce drapeau n'est pas défini, la position initiale est le début du fichier.)
  • ios::app Toutes les opérations de sortie sont effectuées à la fin du fichier, en ajoutant le contenu au contenu actuel du fichier.
  • ios::trunc Si le fichier est ouvert pour des opérations de sortie et qu'il existait déjà, son contenu précédent est supprimé et remplacé par le nouveau.

Tous ces drapeaux peuvent être combinés à l'aide de l'opérateur de sens des bits OR (|). For example, if we want to open the file example.bin in binary mode to add data we could do it by the following call to member function open:

  1. ofstream myfile;  
  2. myfile.open ("example.bin", ios::out | ios::app | ios::binary); 

Each of the open member functions of classes ofstream, ifstream and fstream has a default mode that is used if the file is opened without a second argument:

class default mode parameter
ofstream ios::out
ifstream ios::in
fstream ios::in | ios::out

Pour les classes ifstream et ofstream, ios::in et ios::out sont automatiquement et respectivement supposés, même si un mode qui ne les inclut pas est passé comme second argument à la fonction membre open (les drapeaux sont combinés).

Pour fstream, la valeur par défaut n'est appliquée que si la fonction est appelée sans spécifier aucune valeur pour le paramètre mode. Si la fonction est appelée avec une valeur quelconque dans ce paramètre, le mode par défaut est remplacé, et non combiné.

Les flux de fichiers ouverts en mode binaire effectuent des opérations d'entrée et de sortie indépendamment de toute considération de format. Les fichiers non binaires sont connus comme des fichiers texte, et certaines traductions peuvent se produire en raison du formatage de certains caractères spéciaux (comme les caractères de nouvelle ligne et de retour chariot).

Puisque la première tâche effectuée sur un flux de fichiers est généralement d'ouvrir un fichier, ces trois classes incluent un constructeur qui appelle automatiquement la fonction membre open et possède exactement les mêmes paramètres que ce membre. Par conséquent, nous aurions également pu déclarer l'objet myfile précédent et effectuer la même opération d'ouverture dans notre exemple précédent en écrivant :

ofstream myfile ("exemple.bin", ios::out | ios::app | ios::binary);

Combiner la construction d'objet et l'ouverture de flux en une seule déclaration. Les deux formes pour ouvrir un fichier sont valides et équivalentes. Pour vérifier si l'ouverture d'un flux de fichiers a réussi, vous pouvez le faire en appelant au membre is_open. Cette fonction membre renvoie une valeur bool de true dans le cas où effectivement l'objet stream est associé à un fichier ouvert, ou false sinon :

if (myfile.is_open()) { /* ok, proceed with output */ }

.