Marquage des drapeaux de ios en C ++

Lorsque vous ouvrez un fichier en construisant soit un ofstream ou ifstream Ainsi, vous pouvez modifier la façon dont le fichier sera ouvert en fournissant ce qu'on appelle des drapeaux. En termes informatiques, une drapeau est tout simplement un petit article dont la présence ou l'absence de présence indique une fonction comment faire quelque chose. Avec le ofstream et ifstream les classes, la fonction en question est le constructeur.

Un drapeau ressemble ios :: app si vous utilisez un compilateur qui est pas pleinement conforme ANSI, ou ressemble ios_base :: app si vous utilisez l'un qui est entièrement compatible ANSI. Ce drapeau signifie en particulier que vous voulez écrire dans un fichier, mais que vous souhaitez ajouter à toutes les données existantes qui peuvent déjà être dans un fichier. Vous fournissez ce drapeau comme un argument du constructeur pour ofstream, comme dans l'un des exemples suivants:

ofstream outfile ("AppendableFile.txt", ios :: app) -ofstream outfile ("AppendableFile.txt", ios_base :: app) -

Vous pouvez voir que le drapeau est ajouté comme second paramètre au constructeur. Autres drapeaux existent ailleurs app, et vous pouvez les combiner en utilisant le ou opérateur, |. Par exemple, un drapeau est ios :: nocreate (qui ne sont pas inclus dans de nouveaux compilateurs).

Cela signifie une “ seulement ouvrir le fichier si elle existe déjà n ° 148. Autrement dit, ne créez pas le fichier si elle existe pas. (Rappelez-vous, ofstream crée un fichier si elle existe pas déjà.) Si le fichier ne existe pas, l'ouverture va échouer, et lorsque vous appelez échouer, vous obtiendrez un retour vrai.

La ios :: nocreate drapeau est à portée de main avec ios :: app. Ensemble, ils signifient ouvrir un fichier existant et ajouter à elle. Autrement dit, les deux vont ensemble fonctionnera que si le fichier existe déjà, et l'appel sera d'ouvrir le fichier pour une opération d'ajout. Si ne existe pas déjà le fichier, le fichier ne sera pas créé. Voici un exemple d'appel:

ofstream outfile ("../ MonFichier.txt", ios :: app | ios :: NOCREATE) -Si (outfile.fail ()) {cout lt; lt; "Impossible d'ouvrir le fichier!" lt; lt; endl-retour 0- outfile} lt; lt; "Salut" lt; lt; endl-outfile.close () -

Si MyFile.txt ne existe pas lorsque vous exécutez ce code, vous obtenez le message Impossible d'ouvrir le fichier! Mais si MyFile.txt existe, l'application ouvre, ajoute la chaîne Salut à lui, et se referme enfin.

Il se trouve que le nocreate drapeau ne sont pas disponibles dans la nouvelle bibliothèque standard. Bummer. Par conséquent le code ne fonctionne que si vous utilisez une version antérieure de la bibliothèque. Lorsque vous utilisez le compilateur Code :: Blocks, vous voyez le message d'erreur suivant:

erreur: "nocreate 'est pas un membre de' -std :: ios '

Cependant, vous aurez envie de tester si votre compilateur comprend notamment une bibliothèque qui prend en charge ios :: nocreate. Votre compilateur peut soutenir de toute façon, même si elle comprend la nouvelle bibliothèque standard. Comme alternative à ios :: nocreate, vous pouvez utiliser le code suivant (qui se trouve dans le FileOutput02 exemple):




ifstream infile ("de MyFile.txt ../") - si (infile.fail ()) {cout lt; lt; "Impossible d'ouvrir le fichier!" lt; lt; endl-retour 0-} infile.close () - ofstream outfile ("../ MonFichier.txt", ios :: app) -outfile lt; lt; "Salut" lt; lt; endl-outfile.close () -

Dans ce cas, vous commencez par essayer d'ouvrir le fichier en lecture. Si le fichier existe pas, vous ne pouvez pas lire de lui et le code se termine avec un message d'échec. Si le code peut lire le fichier, il rouvre le fichier en écriture. Ceci est une solution de contournement encombrant, mais il fonctionne.

Voici une liste des drapeaux disponibles. Tout d'abord, voici celles pour ios, dans le cas où vous utilisez un compilateur qui est pas complètement conforme ANSI:

  • ios :: app: Ce drapeau signifie que vous souhaitez ouvrir un fichier et ajouter à elle.

  • ios :: dansIntégrer ce drapeau si vous voulez lire un fichier.

  • ios :: out: Inclure cet indicateur si vous voulez écrire dans un fichier.

  • ios :: trunc: Inclure cet indicateur si vous voulez effacer le contenu du fichier avant d'y écrire. Il est à l'opposé de ajouter, et il est aussi la valeur par défaut si vous ne spécifiez pas spécifiquement ios :: app.

  • ios :: nocreate: Utilisez cette option si vous voulez vous assurer que le fichier ne sera pas créé si elle existe pas, résultant dans le fichier ne pas être ouvert.

  • ios :: noreplace: Ce drapeau est le contraire de nocreate. Utilisez cette option si vous voulez seulement créer un nouveau fichier. Si vous utilisez ce drapeau et le fichier existe déjà, le fichier ne sera pas ouvert, et que le défaut sera de retour vrai.

Compilateurs ANSI-conformes ne supportent pas la ios :: noreplace drapeau soit. Dans ce cas, vous pouvez utiliser l'opposé du correctif pour le iOS: nocreate drapeau, comme montré ici (et trouvé dans le FileOutput03 exemple):

ifstream infile ("de MyFile.txt ../") - si {cout (de infile.fail ()!) lt; lt; "Le fichier existe déjà!" lt; lt; endl-retour 0-} infile.close () - ofstream outfile ("../ MonFichier.txt") - outfile lt; lt; "Salut" lt; lt; endl-outfile.close () -

Dans ce cas, le code tente d'ouvrir le fichier en lecture. Si le fichier existe, le code affiche un message d'erreur et quitte. Sinon, le code crée un nouveau fichier et lui écrit.

Les drapeaux suivants sont disponibles dans un compilateur qui est absolument conforme ANSI!

  • ios :: mangé: Utilisez cette option pour aller à la fin du fichier après l'avoir ouvert. Normalement, vous utilisez cette option lorsque vous souhaitez ajouter des données dans le fichier.

  • ios_base :: binaire: Utilisez cette option pour spécifier que le fichier que vous ouvrez tiendra données binaires - qui est, des données qui ne représente pas des chaînes de caractères.

  • ios_base :: dans: Spécifiez cette option lorsque vous souhaitez lire un fichier.

  • ios_base :: outIntégrer ce drapeau quand vous voulez écrire dans un fichier.

  • ios_base :: truncIntégrer ce drapeau si vous voulez effacer le contenu d'un fichier avant d'y écrire.

  • ios_base :: appIntégrer ce drapeau si vous souhaitez ajouter le fichier. Il est à l'opposé de trunc - qui est, l'information qui est déjà dans le fichier lorsque vous l'ouvrez restera là.

Pourquoi vous avez besoin ne l'en drapeau et un dehors drapeau? Il semble que l'ordinateur doit savoir si vous écrivez à un fichier ou la lecture de celui-ci, en fonction de (respectivement) que vous utilisez ofstream ou ifstream. La réponse à pourquoi vous avez une dans drapeau et un dehors drapeau est que d'autres classes sont disponibles en plus ofstream et ifstream.

Les compilateurs qui ne supportent pas encore pleinement la norme ANSI ont une classe générique dans leurs bibliothèques appelé fstream. Les compilateurs ANSI conformes ont dans leurs bibliothèques une classe de modèle appelé basic_filebuf et une classe appelée filebuf. Si vous utilisez ces classes, vous pouvez utiliser la dans et dehors drapeaux.


» » » » Marquage des drapeaux de ios en C ++