Skip to content
Snippets Groups Projects
cours-fichiers.md 4.09 KiB
Newer Older
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
---
jupytext:
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.13
kernelspec:
  display_name: C++17
  language: C++17
  name: xcpp17
rise:
  auto_select: first
  autolaunch: false
  centered: false
  controls: false
  enable_chalkboard: true
  height: 100%
  margin: 0
  maxScale: 1
  minScale: 1
  scroll: true
  slideNumber: true
  start_slideshow_at: selected
  transition: none
  width: 90%
---

+++ {"slideshow": {"slide_type": "slide"}}

# Fichiers, lecture, écriture

+++ {"slideshow": {"slide_type": "fragment"}}

## Qu’est-ce qu’un fichier?

Un **fichier informatique** est, au sens commun, une collection
d’informations numériques réunies sous un même **nom**, enregistrées sur
un support de stockage tel qu’un disque dur, un CD-ROM ou une bande
magnétique, et manipulées comme une unité.

Techniquement, un fichier est une **information numérique** constituée
d'une **séquence d’octets**, c'est-à-dire d'une séquence de nombres,
permettant des usages divers.

+++ {"slideshow": {"slide_type": "fragment"}}

En bref, c'est comme la mémoire, mais en **persistant**!

De même que le type d'une variable indique comment l'information
est encodée dans la mémoire, le **format du fichier** indique
comment l’information y est encodée.

+++ {"slideshow": {"slide_type": "fragment"}}

Voyons maintenant comment on peut écrire et lire dans un fichier.

+++ {"slideshow": {"slide_type": "slide"}}

## Écriture dans un fichier

+++ {"slideshow": {"slide_type": "fragment"}}

L'exemple suivant écrit `Noel 42` dans le fichier `bla.txt` :

```{code-cell}
---
slideshow:
  slide_type: fragment
---
#include <fstream>
using namespace std;
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
// Déclaration
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
ofstream  flux;
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
// Ouverture
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
flux.open("bla.txt");
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
// Écriture
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
flux << "Noël " << 42 << endl;
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
// Fermeture
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
flux.close();
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

+++ {"slideshow": {"slide_type": "slide"}}

:::{admonition} À retenir

Écrire dans un fichier se fait  en **quatre étapes** :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
1.  Déclaration du flux
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
2.  Ouverture du fichier
3.  Écriture
4.  Fermeture du fichier
:::

+++ {"slideshow": {"slide_type": "slide"}}

## Lecture depuis un fichier

+++ {"slideshow": {"slide_type": "fragment"}}

Nous allons maintenant faire l'opération inverse : lire
les informations stockées dans `bla.txt` :

```{code-cell}
---
slideshow:
  slide_type: fragment
---
#include <fstream>
using namespace std;
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
// Déclaration
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
ifstream flux;
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
// Ouverture du fichier
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
flux.open("bla.txt");
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
string s;
// Lecture
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
flux >> s;
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
s
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
int i;
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
flux >> i;
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
i
```

```{code-cell}
---
slideshow:
  slide_type: fragment
---
// Fermeture du fichier
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
flux.close();
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

+++ {"slideshow": {"slide_type": "slide"}}

:::{admonition} À retenir
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
:class: hint
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed

De même que l'écriture dans un fichier, la lecture se fait en **quatre
étapes** :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
1.  Déclaration du flux
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
2.  Ouverture du fichier
3.  Lecture
4.  Fermeture du fichier

:::

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"slideshow": {"slide_type": "slide"}}

:::{admonition} À retenir
:class: hint

- La lecture et l'écriture se fait en fonction du type des données.
- À la lecture, les espaces, tabulations et sauts de lignes servent de
  séparateurs entre entiers, mots, etc.

:::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} À retenir
:class: hint

Comme nous utilisons un flux pour lire depuis un fichier, la lecture
se fait de façon séquentielle depuis le début du fichier. De même pour
l'écriture, il est nécessaire de réécrire l'intégralité du fichier.

Il existe d'autres façons d'accéder à un fichier permettant de n'en
lire ou n'en modifier qu'une fraction -- on parler d'accès aléatoire
(*random access*) -- mais nous n'en aurons pas besoin ce semestre.

:::