La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Operations de Base en C++ sur les Fichiers

Présentations similaires


Présentation au sujet: "Operations de Base en C++ sur les Fichiers"— Transcription de la présentation:

1 Operations de Base en C++ sur les Fichiers
Gestion de Fichiers Operations de Base en C++ sur les Fichiers

2 Plan du cours d’aujourd’hui
Fichiers logiques vs. fichiers physiques Ouverture et fermeture des fichiers Lecture, écriture et recherche Caractères speciaux La structure du répertoire de l’Unix Périphériques et fichiers logiques Gestion de fichiers en Unix

3 Ouverture de fichiers Une fois que l’identificateur du fichier logique est connecté à un fichier physique ou à un périphérique, il est nécessaire de déclarer ce que l’on compte faire avec le fichier: Ouvrir un fichier existant Creer un nouveau fichier Le fichier est pret à être utilisé par le programme. On est positionné au début du fichier qui est maintenant prêt à la lecture/ écriture.

4 Ouverture de fichiers en C
FILE * outfile; outfile = fopen (“monfichier.txt”,”w”); Le premier argument indique le nom du fichier et le second le mode d’ouverture. Le mode peut être: “r”, “w”, “a”, “r+”, “w+”, “a+”.

5 Ouverture de fichiers en C++
fstream outfile; Outfile.open (“monfichier.txt”,ios::out); Le second argument indique le mode. Sa valeur est calculée en appliquant l’operateur “|” (“bitweise or”) sur des constantes prédéfinies dans la classe ios. Ces constantes sont: “ios::in”, “ios::out”, “ios::app”, “ios::trunc”, “ios::nocreate”, “ios::noreplace”, “ios::binary”, etc.

6 Fichier logique vs. fichier physique
Fichier Physique: collection d’octets sauvegardés sur un disque ou sur une bande magnétique Fichier Logique: “Canal” (analogie: ligne téléphonique) cachant les détails de la localisation et des caractéristiques physiques au programme Lorsqu’un programme veut utiliser un fichier particulier, “data”, le système d’exploitation doit trouver le fichier physique appelé “data” et établir la connection en lui affectant un fichier logique. Le nom de ce dernier est celui utilisé dans le programme.

7 Fichier logique vs. physique: C et C++
En C, a fichier logique est déclaré comme suit: FILE *outfile; En C++, c’est fait comme ceci: fstream outfile; Ici, ce nom est déclaré comme un objet de la classe fstream. Dans les deux langues, le nom logique outfile sera associé plutard à un nom physique.

8 Fermeture de fichiers Permet au nom logique du fichier d’être utilisé par un autre fichier physique (c’est comme raccrocher le téléphone après un appel). Garantit que tout ce qui a été ecrit dans le fichier est en effet sauvegardé Les fichiers sont généralement fermés automatiquement par le système d’exploitation (à moins que le programme ait été anormalement interrompu). En C: fclose(outfile); En C++: outfile.close();

9 Lecture Read(Source_file, Destination_addr, Size)
Source_file = location à laquelle le programme commence sa lecture (i.e., son nom de fichier logique) Destination_addr = la première addresse du bloc de mémoire dans lequel les données seront sauvegardées Size = la quantité d’information arrivant du fichier (le nombre d’octets -- MBs)

10 Lecture en C char c; // un charactère Argument de fread:
char a[100]; // un array avec 100 charactères FILE * infile; infile = fopen("monfichier”,"r"); fread(&c,1,1,infile); /* lis un charactère */ fread(a,1,10,infile); /* lis 10 charactères */ Argument de fread: 1er argument: adresse de destination (adresse de c) 2ème argument: taille de l’élément en bytes (un char =1 byte) 3ème argument: nombre d’élément à lire 4ème argument: nom logique du fichier à lire

11 Lecture en C++ char c; // un charactère
char a[100]; // un array avec 100 charactères fstream infile; infile.open("monfichier”,ios::in); infile >> c; // lis un charactère infile.read(&c,1) // une autre manière de lire un char. infile.read(a,10); // lis 10 charactères Note: C++ fournit une méthode read correspondant à la fonction read de C.

12 Ecriture Write(Destination_file, Source_addr, Size)
Destination_file = le nom du fichier logique dans lequel les données seront écrites Source_addr = la première addresse du bloc de mémoire dans lequel les données qui vont être écrites sont sauvegardées Size = Le nombre d’octets qui seront écrits dans le fichier

13 Ecriture en C char c; char a[100]; FILE * outfile;
outfile = fopen("mynew.txt","w"); /* Nous omettons d’initialiser c et a */ fwrite(&c,1,1,outfile); fwrite(a,1,10,outfile);

14 Ecriture en C ++ char c; char a[100]; fstream outfile;
outfile.open("mynew.txt",ios::out); // Nous omettons d’initialiser c et a outfile << c; outfile.write(&c,1); outfile.write(a,10);

15 Détection de la fin d’un fichier
Tester si un fichier est à la fin comme suit: En C: int i; i = fread(&c,1,1,infile); // essaie de lire if (i==0) // true si le fichier est à la fin …. En C++: infile >> c; // essaie de lire if (infile.fail()) // true si le fichier est à la fin ...

16 Recherche La lecture n’est pas confinée un processus séquentiel: un saut peut être fait à des locations spécifiques dans le fichier ou jusqu’au bout du fichier afin d’y ajouter (“append”) de l’information. Un déplacement direct jusqu’à une position spécifique dans un fichier s’appelle recherche (“seeking”). Seek(Source_file, Offset) Source_file = le nom du fichier logique dans lequel la recherche va pendre place. Offset = le nombre de positions dans le fichier que le pointeur dépassera à partir du début du fichier.

17 Programme manipulant des fichiers
Exemple de programme pour afficher le contenu d’un fichier sur l’écran – version C #include <stdio.h> main() { char ch; FILE * infile; infile = fopen("A.txt","r"); while (fread(&ch,1,1,infile) != 0) fwrite(&ch,1,1,stdout); fclose(infile); }

18 Programme – version C++
#include <fstream.h> main() { char ch; fstream infile; // declare un nom logique infile.open("A.txt",ios:in); // attache le nom logique a un nom physique infile.unsetf(ios::skipws); // flag pour inlure les “blanks” dans la lecture infile >> ch; while (! infile.fail()) { cout << ch ; infile >> ch ; } infile.close();

19 Caractères spéciaux Parfois, le système d’exploitation essaie de rendre la vie des usagers “reguliers” plus facile en ajoutant ou effacant certains caractères automatiquement. Ces modifications, néanmoins, rendent la vie des programmeurs bien plus compliquée. Il est important de se souvenir que de telles situations peuvent fréquemment arriver.

20 Caractères spéciaux: exemples
Control-Z est ajouté à la fin de tous les fichiers MS-DOS. Ceci est fait pour signaler la fin d’un fichier. <Carriage-Return>+<Line-Feed> sont ajoutés à la fin de chaque lignes de fichiers MS-DOS. <Carriage-Return> est effacé et remplacé par le nombre de caractères par ligne de texte dans les fichiers VMS.

21 La structure du répertoire de l’Unix
Un grand système informatique contient de nombreux fichiers (parfois des milliers). Ces fichiers doivent être organisés. Dans un système d’exploitation, cette organisation s’appelle le système de fichiers (“file system”). Le système de fichiers de l’Unix est une organisation des répertoires en arbre. La racine de l’arbre est représentée par le caractère ‘/’ (“slash”. Chaque répertoire contient des fichiers réguliers et/ou d’autres répertoires. Le nom d’un fichier sauvegardé dans un répertoire Unix correspond à son nom physique.

22 La structure du répertoire de l’Unix (suite)
Chaque fichier peut être identifié de façon unique en donnant son cheminement absolu (“absolute path”). Par example: /homes/kiringa/courses/csi2511. Le répertoire dans lequel vous êtes situé s’appelle le répertoire courant (“current directory”). On peut aussi se réferrer à un fichier par son cheminement (“path”) relatif au répertoire courant. ‘.’ signifie le répertoire courant et ‘..’ signifie le répertoire parent (“parent directory”).

23 Péripheriques et fichiers logiques
Unix a une vue très générale de ce qu’est un fichier: pour Unix, un fichier est une séquence d’octets dont ni la location de stockage ni la provenance ne sont importantes. Les disques ou cassettes magnétiques peuvent être assimilés à des fichiers. De même pour le clavier et la console. Quelle que soit la forme physique d’un fichier en Unix (que ce soit un fichier réel ou un périphérique), il est représenté de la même façon: par un entier.

24 stdout, stdin, stderr stdout  console fwrite(&ch, 1, 1, stdout); ou
cout << ch; stdin  clavier fread(&ch, 1, 1, stdin); ou cin >> ch; stderr  erreur standard (en fait, la console) Lorsque le compilateur détecte une erreur, le message d’erreur est écrit dans ce fichier

25 Redirection et “pipes” d’entrée/sortie
< nom_de_fichier -- rediriger stdin dans “nom_de_fichier” > nom_de_fichier -- rediriger stdout dans Example: a.out < mon_entrée > ma_sortie Programme1 | Programme2 -- prend le stdout de Programme1 et l’utilise comme stdin pour Programme2 Example: list | sort

26 Commandes usuelles de fichiers en Unix
cat filenames -- Imprime le contenu des fichiers nommés tail filename -- Imprime les 10 dernières lignes du fichier cp file1 file2 -- copie file1 dans file2 mv file1 file2 -- déplace (renomme) file1 dans file2 rm filenames -- efface les fichiers nommés chmod mode filename -- change le mode de protection des fichiers nommés ls -- Liste le contenu du répertoire mkdir name -- crée un répertoire avec le nom donné rmdir name -- efface le répertoire nommé


Télécharger ppt "Operations de Base en C++ sur les Fichiers"

Présentations similaires


Annonces Google