CodeGym /Cours /C# SELF /Formats de fichiers : Textuels et Binaires

Formats de fichiers : Textuels et Binaires

C# SELF
Niveau 35, Leçon 1
Disponible

1. Fichiers texte

Souviens-toi : l’ordi stocke tout, absolument tout, comme des uns et des zéros (ou, si t’as pas peur des mots, comme une séquence d’octets). Mais si tu files le même fichier à deux programmes différents, rien ne garantit qu’ils vont le lire pareil. Genre, un programme va voir du texte normal, l’autre – une suite d’octets "bizarres". Tout dépend du format du fichier – c’est-à-dire comment ces octets sont interprétés. Le format décrit la structure interne des données, les règles de lecture et l’encodage. Sans connaître le format, un programme peut juste rien piger à ce qu’il y a dans le fichier.

Un fichier texte, c’est un fichier où les données sont du texte normal dans un certain encodage (le plus souvent — UTF-8 ou, pour les puristes, ASCII). Tu peux ouvrir ce genre de fichier dans n’importe quel éditeur de texte (genre Notepad ou VS Code) et lire direct — c’est des lignes de caractères, pas des octets chelous ou des structures binaires.

Exemples typiques

  • *.txt — fichiers texte classiques, genre "to-do.txt" ou "best-books.txt".
  • *.csv — fichiers où les données sont séparées par des virgules ou des points-virgules (pratique pour les tableaux).
  • *.json — fichiers pour échanger des données structurées (genre des listes de livres).
  • *.xml,*.html — pour stocker et transférer des données structurées.

Exemple de fichier CSV


Dune;Frank Herbert;1965
1984;George Orwell;1949
Le Maître et Marguerite;Mikhaïl Boulgakov;1966
Exemple du contenu de books.txt (format CSV)

Chaque ligne — c’est un enregistrement (genre un livre). Les valeurs dans la ligne sont séparées par un point-virgule, ce qui fait du fichier un CSV (Comma-Separated Values). Comma, c’est la virgule, mais ici on a mis un autre séparateur (;). Les caractères que tu vois — c’est les mêmes octets que le programme lit, à condition qu’il sache comment interpréter le format texte et l’encodage du fichier.

Comment un programme bosse avec un fichier texte

Il suffit d’ouvrir le fichier "en mode texte", et tu peux lire ligne par ligne. Exemple (qui va te servir dans les prochaines confs) :


// Lecture simple des lignes d’un fichier (on verra les détails bientôt)
string[] lines = File.ReadAllLines("books.txt");
foreach (string line in lines)
{
    Console.WriteLine(line);
}

Avantages des fichiers texte

  • Lisibles par l’humain (human-readable).
  • Facile à éditer à la main (même dans Notepad).
  • Nickel pour le debug et l’échange entre systèmes différents.
  • Facile à transférer entre plateformes (Windows, Linux, Mac).

Inconvénients des fichiers texte

  • Pas de structure stricte (txt), tu peux facilement foutre le format en l’air par erreur.
  • Prend plus de place (par exemple, le nombre 12345 = 5 octets, alors qu’en binaire — 4).
  • Données complexes (genre images, audio) — galère ou impossible à passer en texte.
  • Performance : plus lent pour de gros volumes de données.

Bon à savoir

  • Les plateformes gèrent différemment la "fin de ligne" : Windows — \r\n, Unix — \n.
  • Les encodages peuvent varier (UTF-8, UTF-16, ANSI, etc.), donc un fichier écrit sur une machine peut s’afficher en "caractères chinois" sur une autre (en vrai, c’est juste une mauvaise interprétation des octets).

2. Fichiers binaires

Un fichier binaire — c’est un fichier où sont stockés des octets bruts, pas des caractères. Ça peut être n’importe quoi : des nombres, des structures, des images, de la musique, même du code machine. Essaie d’ouvrir un .exe dans Notepad — tu vas voir un tas de trucs incompréhensibles !

Exemples typiques

  • *.exe, *.dll — exécutables et librairies.
  • *.jpg, *.png, *.gif— images.
  • *.mp3, *.wav— fichiers audio.
  • *.dat — fichiers avec des données custom.
  • Formats spécifiques d’applis (*.docx, *.xlsx, etc.) — quasi toujours binaires.

Comment c’est foutu un fichier binaire ?

Octet par octet, le programme écrit et lit les données dans le format qu’il veut. Par exemple, un nombre de type int sera écrit sur 4 octets (32 bits), et une chaîne — c’est souvent la longueur + les octets des caractères dans un encodage précis.

Dans un fichier texte, le nombre 12345 — c’est les octets qui correspondent aux caractères '1', '2', '3', '4', '5' :

Caractère Code UTF-8
1 49
2 50
3 51
4 52
5 53

Dans un fichier binaire, int 12345 (ordre des octets petit, little-endian) ça donne :

Position Octet (hex) Valeur
0 0x39 57
1 0x30 48
2 0x00 0
3 0x00 0

(En gros : 12345 = 0x00003039.)

Essaie d’écrire le même nombre en texte et en binaire — compare la taille des fichiers. Le binaire sera plus compact.

Comment un programme bosse avec un fichier binaire

Des streams spéciaux (genre BinaryReader, BinaryWriter). Contrairement au fichier texte, il faut connaître la structure exacte, sinon tu peux rien lire.


// Exemple d’écriture de nombres dans un fichier binaire
var writer = new BinaryWriter(File.Open("books.bin", FileMode.Create));

// Genre, on écrit l’encodage : nombre de caractères (int), puis les octets
string title = "Dune";
writer.Write(title.Length); // On écrit la longueur (int)
writer.Write(title); // On écrit la chaîne (en UTF-8)
writer.Write(1965); // On écrit l’année (int)

writer.Close(); // on ferme le stream

C’est juste un exemple. Je t’expliquerai les détails sur les fichiers binaires dans les prochaines confs.

Avantages des fichiers binaires

  • Compacts : prennent moins de place.
  • Lecture/écriture plus rapide (surtout pour de gros volumes).
  • Tu peux stocker des structures complexes : tableaux, objets imbriqués, etc.

Inconvénients des fichiers binaires

  • Illisibles par l’humain (human-unreadable).
  • Si la structure du fichier change, les anciennes données peuvent être perdues ou "cassées".
  • Il faut toujours des instructions précises pour parser le contenu.

3. Quel format choisir ?

Fichiers texte vs binaires

Critère Fichier texte Fichier binaire
Lisible par l’humain Oui Non
Taille Plus grande Plus petite
Universalité Haute (n’importe quel éditeur) Seulement programmes spéciaux
Vitesse Plus lent Plus rapide
Format strict Non Oui, à respecter absolument
Stockage de structures Compliqué Facile
Risque de corruption Faible (facile à éditer) Élevé (le moindre bug — fichier illisible)

Critères de choix

  • Tu veux que les données soient lisibles, faciles à modifier et à debugger ? — Utilise un fichier texte (genre .txt, .csv, .json).
  • Les données sont complexes, la taille et la vitesse sont importantes ? — Format binaire.
  • Tu dois échanger des données entre plateformes ? — Le texte est mieux, mais l’encodage doit être standard (UTF-8).
  • Ton appli va lire/écrire beaucoup de données, et le format est strict ? — Prends du binaire.

Dans notre appli console «Liste de livres» au début, le format texte (.csv ou .txt) sera parfait. Plus tard, si la structure devient plus complexe ou si tu veux booster la vitesse, tu pourras mater les fichiers binaires ou passer au format JSON/XML.

4. Astuces utiles

Où tu croises des fichiers texte et binaires dans la vraie vie ?

Fichiers texte :

  • Configs d’applis (souvent en .ini ou .json).
  • Scripts, logs, notes.
  • Fichiers d’import/export (pour échanger des données entre applis).

Fichiers binaires :

  • Programmes, jeux, librairies (personne va fouiller là-dedans à la main).
  • Grosses bases de données et archives (genre .mdb, .zip).
  • Médias : musique, photos, vidéos.

Lire tout le fichier d’un coup (en mode texte) :


string allText = File.ReadAllText("books.txt");
// Maintenant allText — une grosse chaîne avec tout le contenu

Ligne par ligne (top pour les listes) :


string[] lines = File.ReadAllLines("books.txt");
foreach (string line in lines)
{
    // Tu peux découper la ligne en morceaux
    string[] parts = line.Split(';');
    // parts[0] — titre, parts[1] — auteur, parts[2] — année
}

Lecture binaire — faut respecter la structure


var reader = new BinaryReader(File.Open("books.bin", FileMode.Open));

int count = reader.ReadInt32(); // Combien de livres
for (int i = 0; i < count; i++)
{
    string title = reader.ReadString();
    string author = reader.ReadString();
    int year = reader.ReadInt32();
    // Tu peux maintenant reconstituer l’enregistrement !
}

reader.Close();

5. Exemple pratique : on crée un fichier de livres

On sauvegarde les données dans un fichier texte

On va stocker chaque livre sur une ligne au format :
titre;auteur;année de première édition


// Liste de livres à sauvegarder
var books = new List<(string Title, string Author, int Year)>
{
    ("Dune", "Frank Herbert", 1965),
    ("1984", "George Orwell", 1949),
    ("Le Maître et Marguerite", "Mikhaïl Boulgakov", 1966)
};

// On sauvegarde dans un fichier texte
var writer = new StreamWriter("books.txt");
foreach (var book in books)
    writer.WriteLine($"{book.Title};{book.Author};{book.Year}");

writer.Close();

Tu peux ouvrir books.txt dans Notepad et voir toutes les données.

On stocke les données dans un fichier binaire

Maintenant, on fait pareil mais en plus compact (même si c’est illisible pour l’humain) :


var writer = new BinaryWriter(File.Open("books.bin", FileMode.Create));

writer.Write(books.Count); // On écrit le nombre de livres
foreach (var book in books)
{
    writer.Write(book.Title); // Chaîne - stockée comme : longueur + octets
    writer.Write(book.Author); // Chaîne
    writer.Write(book.Year); // Année (int)
}

writer.Close();

Si tu ouvres books.bin dans un éditeur texte, tu vas voir du n’importe quoi : des caractères illisibles. C’est normal. Les fichiers binaires sont pas faits pour être lus par l’humain — seule une appli qui connaît exactement comment le fichier a été écrit peut le lire correctement.

6. Erreurs classiques avec les formats

Si tu essaies de lire un fichier binaire comme un fichier texte, tu vas avoir une bouillie de caractères ou carrément une erreur. Pareil, si tu ouvres un fichier texte comme binaire et que tu t’attends à une structure stricte — ça va coincer.

L’erreur la plus fréquente : la structure des données et l’ordre de lecture/écriture ne correspondent pas. Genre, t’as écrit l’année d’abord, puis le titre, mais tu lis dans l’autre sens — tu récupères pas les bonnes infos. Toujours respecter le même ordre d’opérations !

Très souvent, les devs "jettent un œil" dans un fichier texte pour vérifier la logique de sauvegarde/chargement — c’est pour ça que les formats texte sont pratiques au début. Le binaire, c’est pour les scénarios avancés, ou quand tu veux cacher les détails de stockage à l’utilisateur.

2
Mission
C# SELF, niveau 35, leçon 1
Bloqué
Écriture et lecture d’un fichier texte
Écriture et lecture d’un fichier texte
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION