Programmation C++ (débutant)/les fichiers



Documents pareils
Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Programmation impérative

TP : Gestion d une image au format PGM

Programmation système I Les entrées/sorties

Le système de gestion des fichiers, les entrées/sorties.

Les fichiers. Chapitre 4

Cours de Système : Gestion de Fichiers

Cours de C/C++ par la pratique. Hugues Talbot

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Cours 14 Les fichiers

Rappels Entrées -Sorties

Programmation système de commandes en C

Le langage C. Séance n 4

Cours 6 : Tubes anonymes et nommés

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Les chaînes de caractères

Stockage du fichier dans une table mysql:

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

COMPARAISONDESLANGAGESC, C++, JAVA ET

Bases de programmation. Cours 5. Structurer les données

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Conventions d écriture et outils de mise au point

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Les structures. Chapitre 3

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Flux de données Lecture/Ecriture Fichiers

Cours Programmation Système

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

1.6- Génération de nombres aléatoires

I. Introduction aux fonctions : les fonctions standards

Introduction au langage C

Programmation en langage C Eléments de syntaxe

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Algorithmique et Programmation, IMA

Programmation en langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation système en C/C++

SUPPORT DE COURS. Langage C

Le prototype de la fonction main()

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

1 Lecture de fichiers

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

GESTION DES FICHIERS C/UNIX

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Chap III : Les tableaux

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

1. Structure d'un programme FORTRAN 95

Cours de programmation avancée. Le langage C. Université du Luxembourg

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Chapitre 1 : La gestion dynamique de la mémoire

Plan du cours. Historique du langage Nouveautés de Java 7

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Pensez à vous inscrire... si ce n est pas encore fait

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Structure d un programme

Compression de Données - Algorithme de Huffman Document de Conception

TD3: tableaux avancées, première classe et chaînes

Utilisation d objets : String et ArrayList

Premiers Pas en Programmation Objet : les Classes et les Objets

Langage Éric Guérin 5 octobre 2010

Représentation d un entier en base b

Cours d Algorithmique et de Langage C v 3.0

Cours Informatique 1. Monsieur SADOUNI Salheddine

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Java Licence Professionnelle CISII,

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Initiation. àl algorithmique et à la programmation. en C

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

UE Programmation Impérative Licence 2ème Année

Cours 1: Java et les objets

La programmation des PIC en C. Les fonctions, les interruptions.

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Cours d initiation à la programmation en C++ Johann Cuenin

Gestion des fichiers. Telecom-ParisTech BCI Informatique

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Les structures de données. Rajae El Ouazzani

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Langage Java. Classe de première SI


Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

INITIATION A LA PROGRAMMATION

Manuel d'installation

Programmation Structurée en Langage C

Outils pour la pratique

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Recherche dans un tableau

UE C avancé cours 1: introduction et révisions

Introduction au pricing d option en finance

Initiation à la programmation en Python

3IS - Système d'exploitation linux - Programmation système

Transcription:

Programmation C++ (débutant)/les fichiers 1 Programmation C++ (débutant)/les fichiers Généralité sur les fichiers La règle générale pour créer un fichier est la suivante : il faut l'ouvrir en écriture. on écrit des données dans le fichier. on ferme le fichier. Pour lire des données écrites dans un fichier : on l'ouvre en lecture. on lit les données en provenance du fichier. on ferme le fichier. Fichiers textes ou binaires Il existe 2 types de fichiers : les fichiers textes qui sont des fichiers lisibles par un simple éditeur de texte. les fichiers binaires dont les données correspondent en général à une copie bit à bit du contenu de la RAM. Ils ne sont pas lisibles avec un éditeur de texte. cstdio ou fstream Il existe principalement 2 bibliothèques standard pour écrire des fichiers : cstdio qui provient en fait du langage C. fstream qui est typiquement C++. Utilisation de cstdio La fonction FILE * fopen(const char * filepath, char * mode) Cette fonction permet d'ouvrir un fichier en lecture ou en écriture. Le paramètre filepath est un tableau de char contenant le chemin du fichier sur lequel on souhaite travailler. Le paramètre mode indique le mode d'ouverture de filepath : lecture ou écriture, texte ou binaire. Le mode peut avoir l'une des valeurs suivantes : "r" (read) : lecture, "w" (write) : écriture, fichier créé ou écrasé s'il existait déjà, "a" (append) : écriture en fin de fichier existant (ajout de données). Sur certaines plateformes (Windows par exemple), on peut y ajouter le type d'écriture (texte ou binaire), sur les autres (Linux par exemple) le type est ignoré : "b" : mode binaire, "t" : mode texte. Enfin, on peut ajouter le signe "+" afin d'ouvrir le fichier en lecture et écriture à la fois. Exemples : "r+" : ouverture en lecture et écriture, "wb" : ouverture en écriture binaire.

Programmation C++ (débutant)/les fichiers 2 La fonction fopen retourne le pointeur NULL si l'ouverture du fichier a échouée. Dans le cas contraire, elle retourne un pointeur vers une structure FILE. Ce pointeur servira à écrire ou lire dans le fichier, ainsi qu'à le fermer. La fonction fclose(file *) Cette fonction permet de fermer un fichier, qu'il soit ouvert en lecture ou en écriture. On passe en paramètre à cette fonction le pointeur FILE * fourni par la fonction fopen(...). Les fichiers binaires La fonction fwrite(const void * buffer, int size,int nb, FILE * f) : Cette fonction écrit nb élements de size octets (soit nb*size octets) à partir du pointeur buffer (dans la RAM) vers le fichier f qui doit être ouvert en écriture. Il s'agit donc d'un transferts d'octets de la RAM dans un fichier. La fonction fread(const void * buffer, int size,int nb, FILE * f) : Cette fonction lit nb élements de size octets (soit nb*size octets) à partir du fichier f (qui doit être ouvert en lecture) vers le pointeur buffer (dans la RAM). Il s'agit donc d'un transferts d'octets d'un fichier vers la RAM. Exemple : écriture du fichier #include<cstdio> FILE * f; int a = 78, i, t1 [6]; double b = 9.87; char c = 'W', t2 [10]; for(i = 0; i < 6; i++) t1 [i] = 10000 + i; strcpy (t2, "AZERTYUIO"); cout << t2 << endl; f = fopen ("toto.xyz", "wb"); if (f == NULL) cout << "Impossible d'ouvrir le fichier en écriture!" << endl; fwrite (&a,sizeof(int),1,f); fwrite (&b,sizeof(double),1,f); fwrite (&c,sizeof(char),1,f); fwrite (t1,sizeof(int),6,f); fwrite (t2,sizeof(char),10,f); fclose (f);

Programmation C++ (débutant)/les fichiers 3 Dans ce programme, on ouvre le fichier binaire nommé toto.xyz en écriture. Si on a réussi à ouvrir le fichier, on y écrit un entier, un double, un char, puis un tableau de 6 entiers et finalement un tableau de 10 char. On remarquera que pour écrire un entier il faut écrire &a pour obtenir un pointeur vers cet entier. Pour copier le tableau t1 on écrire juste t1 car t1 est déjà un pointeur vers le premier élément du tableau. Exemple : lecture du fichier #include<cstdio> FILE * f; int a, t1 [6], i; double b; char c, t2[10]; f = fopen("toto.xyz", "rb"); if (f == NULL) cout << "Impossible d'ouvrir le fichier en lecture!" << endl; fread (&a,sizeof(int),1,f); fread (&b,sizeof(double),1,f); fread (&c,sizeof(char),1,f); fread (t1,sizeof(int),6,f); fread (t2,sizeof(char),10,f); fclose (f); cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl; cout << t1 [i] << endl; cout << t2 << endl; Dans ce programme, on ouvre le fichier binaire nommé toto.xyz en écriture. Si on a réussi à ouvrir le fichier, on lit un entier, un double un char, puis un tableau de 6 entiers et finalement un tableau de 10 char.

Programmation C++ (débutant)/les fichiers 4 Les fichiers textes la fonction fprintf(file *f, const char * format,...) La fonction fprintf permet d'écrire en mode texte dans un fichier différentes données. On n'oubliera pas de laisser un espace entre les données pour pouvoir les relire (ou un passage à la ligne). Le paramètre format permet de spécifier la nature des données et des caractéristiques sur leur écriture dans le fichier (le nombre de caractères pare exemple. Exemples de formats : "%d" ==> indique un entier "%lf" ==> indique un double "%3.7lf" ==> indique un double avec 3 chiffres avant la virgule et 7 après. "%s" ==> indique une chaine de caractères sans expace. la fonction fscanf(file * f, const char * format,...) La fonction scanf permet de lire les données à partir d'un fichier texte en utilisant le format de données indiqué ( qui est identique à printf). Exemple : écriture du fichier #include<cstdio> FILE * f; int a = 78, t1 [6], i; double b = 9.87; char c = 'W', t2 [10]; t1 [i] = 10000+i; strcpy (t2, "AZERTYUIO"); f = fopen ("toto.txt", "wt"); if (f == NULL) cout << "Impossible d'ouvrir le fichier en écriture!" << endl; fprintf (f, "%d %lf %c ", a, b, c); for (i=0;i<6;i++) fprintf (f, "%d ", t1[i]); fprintf (f, "%s ", t2); fclose (f); Dans ce programme, on ouvre le fichier texte nommé toto.txt en écriture. Si on a réussi à ouvrir le fichier, on y écrit un entier, un double, un char, puis un tableau de 6 entiers et finalement une chaîne de caractères sans espace contenu

Programmation C++ (débutant)/les fichiers 5 dans un tableau de char. Exemple : lecture du fichier #include <cstdlib> #include<cstdio> FILE * f; double b; int a, t1 [6], i; char c, t2 [10]; f = fopen ("toto.txt", "rt"); if (f == NULL) cout << "Impossible d'ouvrir le fichier en lecture!" << endl; fscanf (f, "%d %lf %c ", &a, &b, &c); fscanf (f, "%d ", &t1 [i]); fscanf (f, "%s ", t2); fclose (f); cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl; cout << t1 [i] << endl; cout << t2 << endl; Dans ce programme, on ouvre le fichier binaire nommé toto.txt en lecture. Si on a réussi à ouvrir le fichier, on lit un entier, un double, un char, puis un tableau de 6 entiers et finalement une chaîne de caractères. Utilisation de fstream Les fichiers textes La classe ofstream : Il s'agit d'un fichier ouvert en écriture : pour créer un tel fichier il suffit d'appeler le constructeur qui a en paramètre le nom du fichier : par exemple ofstream f("toto.txt");. Pour savoir si le fichier a bien été ouvert en écriture la méthode is_open() renvoie true si le fichier est effectivement ouvert.

Programmation C++ (débutant)/les fichiers 6 Pour écrire dans le fichier on utilise l'opérateur << sans oublier d'écrire des séparateurs dans le fichier texte. La classe ifstream : Il s'agit d'un fichier ouvert en lecture : pour créer un tel fichier il suffit d'appeler le constructeur qui a en paramètre le nom du fichier : par exemple ifstream f("toto.txt");. Pour savoir si le fichier a bien été ouvert en lecture la méthode is_open() renvoie true si le fichier est effectivement ouvert. Pour lire dans le fichier on utilise l'opérateur >>. Exemple : ecriture d'un fichier texte #include <fstream> #include <string> int main(void) int a = 78, t1 [6], i; double b = 9.87; char c = 'W'; string s; t1 [i] = 10000+i; s = "AZERTYUIO"; ofstream f ("toto.txt"); if (!f.is_open()) cout << "Impossible d'ouvrir le fichier en écriture!" << endl; f << a << " " << b << " " << c << endl; f << t1 [i] << " "; f << s; f.close(); Exemple : lecture d'un fichier texte #include <fstream> #include <string>

Programmation C++ (débutant)/les fichiers 7 int a, t1 [6], i; double b; char c; string s; ifstream f ("toto.txt"); if (!f.is_open()) cout << "Impossible d'ouvrir le fichier en lecture!" << endl; f >> a >> b >> c; f >> t1 [i]; f >> s; f.close(); cout << "a=" << a << endl << "b=" << b <<endl << "c=" << c <<endl; cout << t1 [i] << endl; cout << s << endl; Les fichiers binaires La classe ofstream : Pour ouvrir en écriture un fichier binaire, il suffit d'appeler le constructeur qui a en paramètre le nom du fichier et le mode d'ouverture et fixer ce deuxième paramètre à ios::out ios::binary: par exemple ofstream f("toto.xyz",ios::out ios::binary);. Pour savoir si le fichier a bien été ouvert en écriture la méthode is_open() renvoie true si le fichier est effectivement ouvert. Pour écrire dans le fichier on utilise la méthode write((char *)buffer, int nb) pour écrire nb octets dans ce fichier. La classe ifstream : Pour ouvrir en lecture un fichier binaire, il suffit d'appeler le constructeur qui a en paramètre le nom du fichier et le mode d'ouverture et fixer ce deuxième paramètre à ios::in ios::binary: par exemple ifstream f("toto.xyz",ios::in ios::binary);. Pour savoir si le fichier a bien été ouvert en écriture la méthode is_open() renvoie true si le fichier est effectivement ouvert. Pour lire dans le fichier on utilise la méthode read((char *)buffer, int nb) pour lire nb octets de ce fichier. Ecriture d'un fichier binaire

Programmation C++ (débutant)/les fichiers 8 #include <fstream> int a = 78, t1 [6], i; double b = 9.87; char c = 'W'; t1 [i] = 10000+i; ofstream f ("toto.xyz", ios::out ios::binary); if(!f.is_open()) cout << "Impossible d'ouvrir le fichier en écriture!" << endl; f.write ((char *)&a, sizeof(int)); f.write ((char *)&b, sizeof(double)); f.write ((char *)&c, sizeof(char)); f.write ((char *)&t1[i], sizeof(int)); f.close(); lecture d'un fichier binaire #include<fstream> int a, t1 [6], i; double b; char c; string s; ifstream f ("toto.xyz", ios::in ios::binary); if (!f.is_open()) cout << "Impossible d'ouvrir le fichier en lecture!" << endl;

Programmation C++ (débutant)/les fichiers 9 f.read ((char *)&a, sizeof(int)); f.read ((char *)&b, sizeof(double)); f.read ((char *)&c, sizeof(char)); f.read ((char *)&t1[i], sizeof(int)); f.close(); cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl; cout << t1 [i] << endl;