C++ : TP 2 - Flux d'E/S
© D. Mathieu mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 03/01/2000 -
Dernière mise à jour : 25/01/2001

Remarques préliminaires :
-
Tous les exercices de ce TP doivent être effectués dans le répertoire dirflux qui sera considéré comme répertoire courant.
-
Recopier le fichier dirstring/Makefile dans le répertoire courant.
-
Rappel :
Chemins d'accès aux sources des corrigés.
Sommaire
Lecture/Affichage unique
exo_01
[1]
-
Liste des fichiers créés ou modifiés :
exo_01.cxx
Se placer dans le répertoire courant, si ce n'est déjà fait.
Y recopier les fichiers Makefile et Squelette.cxx du TP précédent.
Recopier le fichier Squelette.cxx dans exo_01.cxx.
Dans l'espace de noms anonyme, écrire la fonction Exo_01() qui lit une chaîne au clavier et l'affiche à l'écran (utiliser la fonction getline() présentée avec la classe
string).
Compiler et tester.
Corrigés :
exo_01.cxx
Sommaire
Lectures/Affichages multiples
exo_02
-
Liste des fichiers créés ou modifiés :
exo_02.cxx
Recopier le fichier exo_01.cxx dans exo_02.cxx.
Ecrire la fonction Exo_02() qui, dans une boucle, lit une chaîne au clavier et l'affiche à l'écran.
La boucle se termine lorsque l'utilisateur tape le caractère "fin du fichier" au clavier (Ctrl+D) (utiliser la fonction eof() de la classe istream).
Attention : contrairement à Ada, le prédicat eof() n'est vrai qu'APRES qu'une tentative de lecture a échoué. Il faut donc toujours faire une tentative de lecture avant de tester par eof() si elle a échoué ou non.
Compiler et tester.
Corrigés :
exo_02.cxx
Sommaire
Redirection des flux standard
Utiliser le programme exo_02, sans rien y changer, pour recopier un fichier source (par exemple exo_02.cxx) dans un fichier destination (par exemple exo_02.copy).
Pour cela, utiliser les possibilités de redirection offertes par Unix.
Sommaire
Affichage d'un fichier
exo_04
-
Liste des fichiers créés ou modifiés :
exo_04.cxx
Recopier le fichier exo_02.cxx dans exo_04.cxx.
Ecrire la fonction Exo_04() qui, dans une boucle, lit un fichier source (par exemple exo_02.cxx) ligne par ligne et l'affiche à l'écran.
La boucle se termine à la rencontre de la marque "fin-de-fichier".
Le fichier est associé à un flux d'entrée de la classe ifstream.
Inclure l'entête <fstream>.
Utiliser l'affichage page par page ( | less ) pour éviter le défilement trop rapide de l'écran.
Compiler et tester.
Corrigés :
exo_04.cxx
Sommaire
Lecture d'un fichier dans une seule chaîne
exo_05
-
Liste des fichiers créés ou modifiés :
exo_05.cxx
Ecrire la fonction Exo_05() qui, dans une boucle, lit chaque ligne d'un fichier source (par exemple exo_05.cxx), la concatène aux précédentes dans une seule chaîne (string) et la fait suivre d'un caractère "retour chariot" ('\n').
La boucle se termine à la rencontre de la marque "fin-de-fichier".
La chaîne est alors affichée à l'écran.
Compiler et tester.
Corrigés :
exo_05.cxx
Sommaire
Copie de fichier à fichier
exo_06
-
Liste des fichiers créés ou modifiés :
exo_06.cxx
Recopier le fichier exo_05.cxx dans exo_06.cxx.
Ecrire la fonction Exo_06() qui, dans une boucle, lit un fichier source (par exemple exo_06.cxx) ligne par ligne et le recopie dans un fichier destination (par exemple exo_06.copy).
Le numéro de chaque ligne doit précéder chaque ligne
(sur 4 colonnes), sous la forme (par exemple) :
8 : {
9 : void Exo_01 (void)
10 : {
11 : string
S; |
La boucle se termine à la rencontre de la marque "fin du fichier". Le fichier associé à un flux de sortie est de la classe ofstream.
En fin de boucle, afficher à l'écran le nombre totale de lignes lues et recopiées.
Vérifier l'exécution correcte en affichant le fichier de sortie.
Compiler et tester.
Corrigés :
exo_06.cxx
Sommaire
Lecture du nom de fichier au clavier
exo_07
-
Liste des fichiers créés ou modifiés :
exo_07.cxx
Recopier le fichier exo_06.cxx dans exo_07.cxx.
Ecrire la fonction Exo_07() qui lit au clavier le nom du fichier source (un string) et du fichier destination, puis effectue le même traitement que dans l'exercice 6.
La tester sur des noms de fichiers valides (en particulier, s'assurer que le fichier source existe bien).
Remarque :
les constructeurs des classe ifstream() et ofstream() n'acceptent pas directement des objets de la classe string, mais seulement du type NTCTS.
Cette conversion peut être obtenue en utilisant la fonction c_str() membre de la classe string.
Compiler et tester.
Corrigés :
exo_07.cxx
Sommaire
Validation de l'existence d'un fichier
exo_08
-
Liste des fichiers créés ou modifiés :
exo_08.cxx
Recopier le fichier exo_07.cxx dans exo_08.cxx.
Cet exercice est semblable au précédent, sauf en ce qui concerne l'ouverture des fichiers.
Placer la lecture du nom du fichier source dans une boucle, jusqu'à ce que l'ouverture en lecture (ios::in) soit valide.
Placer la lecture du nom du fichier destination dans une boucle, jusqu'à ce que l'ouverture en écriture (ios::out) et sans remplacement (ios::noreplace)
[2]
soit valide.
Compiler et tester.
Corrigés :
exo_08.cxx
Sommaire
Téléchargement des corrigés :
tpflux.zip
Chemins d'accès aux sources des corrigés :
~mathieu/PARTAGE/src/tp/tpC++/tpflux/dirflux
[1]
Tous les exercices de ce TP peuvent être compilés avec le compilateur Borland C++ 5.5.
Rappel : l'extension standard .cxx des fichiers sources doit être remplacé par .cpp.
[2]
Cette option est aussi reconnue par le compilateur Borland C++ 5.5

© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique