1. Introduction
Un fichier — c'est juste un bloc de données qui est physiquement stocké sur un support : disque dur, SSD, clé USB, ou même une disquette (passe le bonjour à ton grand-père !). Pour l'utilisateur, un fichier — c'est un truc qu'on peut ouvrir, lire, modifier et sauvegarder.
En programmation, un fichier — c'est une séquence d'octets avec un nom et un emplacement, et pour toi, en tant que dev, — c'est un objet qui a un nom, un chemin (comme une adresse), une taille, une date de création, etc. Le plus important : un fichier — c'est un stockage persistant de données. Tout ce qui se passe en mémoire après le lancement du programme disparaît généralement à la fermeture, mais le fichier — il reste.
C'est quoi un système de fichiers ?
Le système de fichiers — c'est la façon dont les fichiers sont stockés et organisés sur le disque. Il répond aux questions : où et comment chercher un fichier, qui y a accès, comment sont faits les dossiers (répertoires), comment trouver le nom du fichier et son contenu.
Imagine une énorme armoire avec plein de tiroirs. Dans chaque tiroir, il peut y avoir des dossiers, et dans chaque dossier — des documents (fichiers). Pour retrouver ton résumé de C#, tu dois ouvrir l'armoire, trouver le bon tiroir, sortir le dossier et dedans — la feuille qu'il te faut. Voilà comment le système de fichiers organise les infos.
Les systèmes de fichiers populaires
- NTFS — le système de fichiers "natif" de Windows.
- FAT32, exFAT — pour les clés USB, cartes SD, disques externes.
- EXT4 — très utilisé sous Linux.
- APFS, HFS+ — macOS.
Pour un dev C#, c'est généralement pas très important : .NET cache les détails d'implémentation, et tu bosses avec l'abstraction "fichier/dossier". Mais parfois, c'est utile de savoir deux-trois trucs. Par exemple, dans NTFS tu peux mettre des espaces et plein de caractères spéciaux dans le nom du fichier, alors que dans FAT32 — non.
2. Comment sont faits les dossiers (répertoires)
Un répertoire (ou dossier) — c'est un type spécial de fichier qui contient des listes d'autres fichiers et/ou de répertoires. L'arbre des répertoires (hiérarchie de fichiers) — c'est le chemin habituel de la racine jusqu'au fichier : par exemple, C:\Users\Ivan\Documents\MonFichier.txt.
- La racine — c'est le tout début du disque (C:\).
- Dedans — des dossiers (sous-dossiers), qui contiennent des fichiers ou d'autres dossiers.
Voilà une petite visualisation :
C:\
└── Users\
└── Ivan\
├── Documents\
│ └── MonFichier.txt
└── Pictures\
└── Chat.jpg
3. C'est quoi un chemin de fichier (file path) ?
Le chemin d'un fichier — c'est "l'adresse" du fichier dans l'arbre des dossiers. Grâce à ça, tu peux trouver exactement le fichier ou le dossier qu'il te faut.
Chemin absolu et chemin relatif
- Chemin absolu : commence à la racine du système de fichiers.
Windows : C:\Users\Ivan\Documents\MonFichier.txt
Linux/macOS : /home/ivan/Documents/MonFichier.txt - Chemin relatif : commence à partir de l'emplacement actuel (le dossier courant).
Par exemple, si ton programme démarre dans le dossier C:\Users\Ivan, alors le chemin relatif Documents\MonFichier.txt pointera vers le même fichier.
Le dossier courant — c'est un concept spécial : c'est le "point de départ" pour tous les chemins relatifs. Quand tu lances un programme, c'est généralement le dossier où se trouve le .exe, ou celui où tu as ouvert le terminal.
Schéma : Chemin absolu et chemin relatif
Chemin absolu Chemin relatif
C:\Projects\MonApp\logs\output.txt logs\output.txt
└─ Racine du disque (C:) └─ Relatif à MonApp lancé
Séparateurs dans les chemins : \ et /
Sous Windows, on utilise le backslash (\), et sous Linux/macOS — généralement le slash (/).
Le .NET moderne gère les deux, mais évite de les mélanger dans le même projet. Pour construire un chemin, utilise toujours une API spéciale (interface de programmation), et ne colle pas les chaînes à la main.
4. Comment un programme voit un fichier
En .NET, t'as tout un tas d'outils pour bosser avec les fichiers. Les principaux :
- System.IO.File : méthodes statiques pour lire, écrire, supprimer, vérifier l'existence d'un fichier, etc.
- System.IO.Directory : méthodes similaires pour les dossiers.
- System.IO.FileInfo et System.IO.DirectoryInfo : des wrappers objets pour accéder aux métadonnées du fichier/dossier.
- System.IO.Path : une classe utilitaire pour bosser avec les chemins (concaténer, récupérer l'extension, le nom, etc).
Quelques exemples
Vérifier si un fichier existe
using System.IO;
if (File.Exists("data.txt"))
{
Console.WriteLine("Fichier trouvé !");
}
else
{
Console.WriteLine("Fichier non trouvé !");
}
Obtenir la taille d'un fichier
var info = new FileInfo("data.txt");
Console.WriteLine($"Taille du fichier : {info.Length} octets");
On verra tous ces exemples en détail dans les prochaines leçons. Pour l'instant — mate juste et apprécie :)
5. Petites astuces utiles
Métadonnées du fichier : nom, extension, taille, dates, etc.
Quand tu bosses avec un fichier, t'es pas seulement intéressé par son contenu — il y a aussi le "passeport du fichier" :
- Nom — comment le fichier s'appelle pour l'humain.
- Extension — .txt, .jpg, .exe, .cs etc. : ça aide (parfois !) à deviner ce qu'il y a dedans.
- Taille — le nombre d'octets.
- Date de création/modification — tu peux savoir quand le fichier a été créé ou modifié pour la dernière fois.
- Attributs — par exemple : fichier en lecture seule, caché, système.
En .NET, les classes FileInfo, DirectoryInfo sont super pratiques pour ça (on verra ça dans une prochaine leçon).
Extensions de fichier et formats
L'extension d'un fichier — c'est juste la partie du nom après le point. Par exemple, pour document.txt l'extension c'est txt. Le système d'exploitation utilise l'extension pour savoir avec quoi "ouvrir" le fichier (genre .jpg — un programme pour les images, .xls — Excel, etc).
Mais pour un dev, l'extension — c'est juste un indice. Le vrai format du fichier est défini uniquement par son contenu. Tu peux, par exemple, ouvrir MonChat.jpg comme un fichier texte — et tu verras plein de "trucs bizarres" (des symboles incompréhensibles, mais sûrement pas une image). Donc retiens bien : l'extension — c'est pas une garantie, juste une convention.
Comment marche la lecture et l'écriture de fichiers : bases
Un fichier — c'est une séquence d'octets. Travailler avec un fichier en C# c'est généralement :
- Ouvrir le fichier pour lire ou écrire (ou les deux).
- Lire les données en mémoire.
- Écrire de nouvelles données sur le disque.
- Fermer le fichier — super important, sinon tu bloques la ressource système (et quelqu'un d'autre pourra pas supprimer le fichier tant que tu le gardes ouvert).
Les API modernes de .NET s'occupent de toi : par exemple, la classe File sait ouvrir, lire et fermer direct. Mais quand tu bosses avec des streams (Stream) et des gros fichiers, là faut faire gaffe (on en parlera dans les prochaines leçons).
Ce qu'il faut savoir sur la multiplateforme
Presque tout le C# moderne tourne pareil sous Windows, Linux et macOS. Mais il y a quand même des subtilités. La plus courante — c'est la différence de séparateurs (\ vs /), et aussi les limites de longueur de nom de fichier et les caractères interdits.
Voilà pourquoi les API comme Path.Combine et les méthodes de System.IO.Path — c'est tes meilleurs potes. Ils "collent" le chemin correctement sur n'importe quel OS. N'écris jamais comme ça :
var filePath = "C:\\Users\\Ivan\\data.txt"; // Uniquement pour Windows !
Mieux :
var filePath = Path.Combine("Users", "Ivan", "data.txt");
Comment connaître le dossier de travail courant ?
Parfois c'est important de savoir où tes fichiers vont être sauvegardés. Pour ça, il y a une classe spéciale :
string currentDir = Environment.CurrentDirectory;
Console.WriteLine($"Dossier courant : {currentDir}");
Au fait, si tu veux laisser l'utilisateur choisir le chemin, utilise des dialogues de sélection de fichier/dossier ou des arguments de la ligne de commande.
GO TO FULL VERSION