C ++ ifstream pour lire les fichiers

C ++ ifstream pour lire les fichiers
Ifstream signifie une circulation d'entrée. «Entrée» fait référence aux caractères d'un fichier entrant dans le programme en cours d'exécution. Il y a aussi le terme C ++, OfStream, qui signifie la sortie de sortie de sortie. Cependant, cet article se concentre sur ifstream. IfStream est une classe C ++, pour gérer la séquence d'octets dans l'ordinateur, qui provient d'un fichier sur le disque, et entre dans le programme en cours d'exécution. IfStream est dans la bibliothèque (en-tête), FStream, qui doit être inclus dans le programme de code source.

Un programme C ++ pour utiliser la classe IFstream doit commencer comme suit:

#inclure
#inclure
Utilisation de Namespace Std;

La première ligne comprend l'en-tête qui a la définition de la classe ifstream. La deuxième ligne comprend l'en-tête ioStream qui a l'objet cout pour l'impression de sortie vers le terminal (console). La troisième ligne est une déclaration, et non une directive. L'espace de noms standard est tout nom suivi de «std:;».

Cet article explique l'utilisation de la classe IFstream de l'en-tête FStream, pour gérer les entrées d'un fichier en disque dans un programme en cours d'exécution. L'entrée est des caractères en séquence qui vont dans un tampon en mémoire avant d'atteindre le programme. En d'autres termes, cet article explique comment lire un fichier texte, à partir du disque, en C++.

Créer un objet IFstream

Afin de lire le contenu d'un fichier en disque, un objet IFStream doit être instancié de la classe IFSTREAM. Les constructeurs couramment utilisés par les programmeurs anglo-saxons (y compris l'Europe occidentale) sont:

Basic_ifstream ();
Explicit Basic_ifstream (const char * s, ios_base :: openMode mode = ios_base :: in);
et
Explicit Basic_ifstream (const string & s, iOS_Base :: openMode mode = ios_base :: in);

Le préfixe, "Basic_" peut être omis pour les trois syntaxes. L'utilisation de la première syntaxe ici sera illustrée dans la section suivante. Dans la deuxième syntaxe, le premier argument est une chaîne littérale ou un tableau de caractères se terminant par '\ 0'. Cette chaîne est un chemin de répertoire et un nom de fichier, e.g. «Dir1 / txtfile.txt », en supposant que le programme est dans le répertoire domestique / utilisateur. Pour la deuxième syntaxe, le premier argument est le même que le premier argument de la syntaxe précédente, mais c'est une chaîne de la classe de chaîne (en-tête). Dans les deux syntaxes, le deuxième argument devrait être «iOS_Base :: in» où «in» moyens for lise (entrée).

Illustration

Une déclaration de construction pour la deuxième syntaxe est la suivante:

ifStream ifs = ifStream ("dir1 / txtfile.txt ", ios_base :: in);

Le nom du fichier dont le contenu doit être lu est: «Txtfile.SMS". Après cette déclaration, le fichier «txtfile.txt »est considéré comme ouvert dans le programme de course. Lorsqu'un fichier est ouvert, une séquence de caractères consécutifs qui représente le fichier est en mémoire pour le contrôle de tampon.

Un segment de code de construction pour la troisième syntaxe est:

String str = "dir1 / txtfile.SMS";
ifStream ifs = ifStream (str, ios_base :: in);

Dans l'une ou l'autre situation, IFS est l'objet ifstream du fichier ouvert. Avec le type de chaîne, n'oubliez pas d'inclure la classe de chaîne (en-tête) dans le programme comme suit:

#inclure

Ouvrir un fichier

Un fichier serait ouvert lorsqu'une séquence de caractères consécutifs du fichier qui représente le fichier est en mémoire pour le contrôle de tampon. Les deuxième et troisième syntaxes de construction ci-dessus ouvrent le fichier pour la lecture, mais la première syntaxe ne. C'est-à-dire que les deuxième et troisième syntaxes effectuent également l'instanciation de l'objet ifstream et l'ouverture du fichier tandis que la première syntaxe ne fait que l'instanciation. Les IF d'objet peuvent être instanciés à partir de la classe ifstream en utilisant la première syntaxe avec l'instruction:

ifStream ifs;

Dans ce cas, un objet de fichier IFS a été créé mais le fichier n'est pas encore ouvert. Pour ouvrir le fichier pour la lecture, la fonction de membre ouvert de la classe ifstream doit être utilisée. Les méthodes surchargées ouvertes (surchargées couramment utilisées par les programmeurs anglo-saxons (y compris l'Europe occidentale) sont:

void open (const char * s, ios_base :: openMode mode = ios_base :: in);
void open (const string & s, iOS_Base :: openMode mode = ios_base :: in);

Notez que l'énoncé de construction «ifstream ifs»; ne mentionne aucun fichier dans le disque. Et donc les premier et deuxième arguments de ces fonctions de membres ouverts () ont les mêmes significations que celles des deuxième et troisième syntaxes de construction ci-dessus.

Illustration

L'utilisation de la première fonction de membre Open () ici (dans cette section) peut être illustrée comme suit:

ifStream ifs;
const char * str = "dir1 / txtfile.SMS";
ifs.ouvert (str, iOS_Base :: in);

L'utilisation de la deuxième fonction de membre Open () ici (dans cette section) peut être illustrée comme suit:

ifStream ifs;
String str = "dir1 / txtfile.SMS";
ifs.ouvert (str, iOS_Base :: in);

La différence dans les deux segments de code est la façon dont la chaîne pour le chemin et le nom de fichier sont construites.

Le fichier a-t-il été ouvert?

Un fichier serait ouvert, lorsqu'une séquence de caractères consécutifs du fichier qui représente le fichier est en mémoire pour le contrôle de tampon. Et si le chemin et / ou le nom de fichier étaient mauvais? Et si le fichier ne pouvait pas être ouvert parce que le disque était mauvais et que ses secteurs ne pouvaient pas être lus? Il est conseillé de toujours vérifier si le fichier a été ouvert à l'aide de la syntaxe:

bool is_open () const;

is_open () est une fonction membre de la classe ifstream. Il renvoie vrai, si le fichier a été ouvert avec succès et faux sinon. Le segment de code suivant illustre l'utilisation de cette fonction membre:

ifStream ifs;
const char * str = "dir1 / txtfile.SMS";
ifs.ouvert (str, iOS_Base :: in);
if (ifs.is_open () == true)
couter << "File is opened." << endl;
autre
couter << "File could not be open!" << endl;

La sortie doit être:

Le fichier est ouvert.

Clôture d'un fichier

Un fichier doit être fermé après l'ouverture. L'action de clôture arrête le tampon en mémoire, libérant un espace mémoire pour d'autres activités. Il brise également gracieusement la connexion qu'elle a établie avec le fichier en disque. ifStream a la fonction membre Close () pour fermer un fichier ouvert. La syntaxe est:

void close ();

Le segment de code suivant illustre son utilisation:

ifStream ifs = ifStream ("dir1 / txtfile.txt ", ios_base :: in);
if (ifs.is_open () == true)
/ * faire quelque chose avec le fichier ouvert ici. * /
ifs.fermer();
couter << "Opened File has been closed." << endl;

autre
couter << "File could not be open!" << endl;

La sortie est:

Le fichier ouvert a été fermé.

Le fichier doit être utilisé lorsque le programmeur est sûr qu'il a été ouvert, puis fermé après cela.

Lire des personnages un par un

ifstream a une fonction membre dont la syntaxe est:

Basic_istream& get (char_type & c);

Lorsqu'il obtient le personnage suivant, il le met dans la variable C et renvoie l'objet ifstream hérité de Basic_Sistream. Le pointeur interne d'Ifstream pointe ensuite vers le personnage suivant pour la lecture suivante. Lorsque la fin de fichier est atteinte, l'objet renvoyé est converti en faux.

Le segment de code suivant lit tous les caractères du fichier un par un et envoie chacun au terminal (console):

Char C;
tandis que (ifs.obtenir (c))
couter << c;

C doit être déclaré en premier. C est l'argument de get (), qui est une fonction membre de l'objet ifstream. La seule déclaration simple (cout << c;) of the while compound statement sends a copy of the character to the output.

Au lieu d'envoyer les caractères à la sortie, ils peuvent être envoyés à un objet String, formant une longue chaîne comme suit:

Char C;
String Str;
tandis que (ifs.obtenir (c))
Str.push_back (c);

Dans ce cas, l'en-tête de chaîne (bibliothèque) doit être inclus dans le programme.

Le programme suivant lit tout le contenu d'un fichier et l'affiche:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

ifStream ifs = ifStream ("dir1 / txtfile.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char C;
String Str;
tandis que (ifs.obtenir (c))
Str.push_back (c);
couter << str<< endl;
ifs.fermer();
couter << "Opened File has been closed." << endl;

autre
couter << "File could not be open!" << endl;
retour 0;

Conclusion

La classe IFstream de l'en-tête FStream gère les entrées d'un fichier d'un disque dans un programme en cours d'exécution. Pour créer un objet Ifstream, utilisez l'une des syntaxes:

Basic_ifstream ();
Explicit Basic_ifstream (const char * s, ios_base :: openMode mode = ios_base :: in);
Explicit Basic_ifstream (const string & s, iOS_Base :: openMode mode = ios_base :: in);

Si la première syntaxe est utilisée, l'objet doit toujours être ouvert, avec l'une des syntaxes de fonction membre suivantes:

void open (const char * s, ios_base :: openMode mode = ios_base :: in);
void open (const string & s, iOS_Base :: openMode mode = ios_base :: in);

Pour savoir si un fichier est ouvert avec succès, utilisez la syntaxe de la fonction membre:

bool is_open () const;

L'objet ifstream doit être fermé après utilisation.

Pour lire les caractères un par-un, utilisez dans un peu de boucle, la syntaxe de la fonction membre:

Basic_istream& get (char_type & c);