Skip to content

Latest commit

 

History

History
98 lines (62 loc) · 2.13 KB

File metadata and controls

98 lines (62 loc) · 2.13 KB

TP C++ n°7

Lecture et écriture dans un flux d'entrées/sorties

Les traitements de fichiers constituent une base pour de nombreux programmes. Il est essentiel de maîtriser les opérations simples (lecture, copie, taille) et de traiter les erreurs d'E/S.

Objectif

Manipuler les flux fichiers en C++ pour lire, copier et mesurer un fichier texte avec gestion correcte des erreurs.

Notions C++

  • ifstream et ofstream ;
  • lecture/écriture caractère par caractère ;
  • gestion d'erreurs d'ouverture/lecture/écriture ;
  • modularisation en fonctions.

Pré-requis

  • TP n°6 ;
  • fonctions ;
  • flux standards.

Travail demandé

Implémenter trois services :

  • afficher le contenu d'un fichier, ;
  • copier un fichier, ;
  • calculer sa taille.

1. Affichage

Écrire une fonction qui affiche le contenu d'un fichier texte.

2. Copie

Écrire une fonction qui copie un fichier source vers un fichier destination.

3. Taille

Écrire une fonction qui retourne la taille du fichier.

4. Robustesse

Définir et implémenter le comportement attendu lorsque :

  • le fichier source est absent, ;
  • l'ouverture échoue, ;
  • l'écriture échoue.

Contraintes techniques

  • Compilateur GNU C++ ;
  • Système d'exploitation Linux, Mac OS X ou Ms-Windows ;
  • Standard recommandé : C++11 ou supérieur.

Exemples d'entrée/sortie

Exemple 1 :

  • entrée : racine.txt ;
  • sortie : contenu affiché + taille (en octets).

Exemple 2 :

  • entrée : fichier inexistant ;
  • sortie attendue : message d'erreur explicite, sans crash.

Compilation

g++ -std=c++11 -Wall -Wextra -o testfichier test_fichier.cxx fichier.cxx

Livrables

  • fichier.h ;
  • fichier.cxx ;
  • test_fichier.cxx ;
  • README.md (tests effectués + gestion des erreurs).

Extensions possibles (bonus)

  • Ajouter une copie binaire ;
  • Ajouter une comparaison d'intégrité entre source et destination.

Critères d'évaluation

  • Exactitude fonctionnelle ;
  • Qualité de la gestion des erreurs ;
  • Qualité de la modularisation ;
  • Qualité des tests et du README.