Module C#.11 – Fichiers & données
Objectif
Maîtriser la manipulation de fichiers, JSON et sérialisation en C# pour persister et charger des données dans vos applications.
Théorie
File / Directory
API pour manipuler les fichiers et dossiers.
Lire un fichier
using System.IO;
// Lire tout le contenu
string contenu = File.ReadAllText("fichier.txt");
// Lire toutes les lignes
string[] lignes = File.ReadAllLines("fichier.txt");
// Lire en bytes
byte[] bytes = File.ReadAllBytes("fichier.txt");
Écrire dans un fichier
// Écrire (remplace le contenu)
File.WriteAllText("fichier.txt", "Nouveau contenu");
// Écrire des lignes
string[] lignes = {"Ligne 1", "Ligne 2"};
File.WriteAllLines("fichier.txt", lignes);
// Écrire en bytes
byte[] donnees = Encoding.UTF8.GetBytes("Contenu");
File.WriteAllBytes("fichier.txt", donnees);
// Ajouter à la fin
File.AppendAllText("fichier.txt", "Ajout");
File.AppendAllLines("fichier.txt", new[] {"Ligne ajoutée"});
Vérifications
bool existe = File.Exists("fichier.txt");
bool estFichier = File.Exists("fichier.txt") && !Directory.Exists("fichier.txt");
FileInfo info = new FileInfo("fichier.txt");
long taille = info.Length;
DateTime modifie = info.LastWriteTime;
Streams (I/O avancé)
Pour plus de contrôle sur la lecture/écriture.
FileStream
using (FileStream stream = new FileStream("fichier.txt", FileMode.Open))
{
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
}
StreamReader / StreamWriter
// Lecture
using (StreamReader reader = new StreamReader("fichier.txt"))
{
string ligne;
while ((ligne = reader.ReadLine()) != null)
{
Console.WriteLine(ligne);
}
}
// Écriture
using (StreamWriter writer = new StreamWriter("fichier.txt"))
{
writer.WriteLine("Ligne 1");
writer.WriteLine("Ligne 2");
}
JSON
C# a un support JSON natif depuis .NET Core 3.0.
System.Text.Json
using System.Text.Json;
// Sérialiser
var personne = new { Nom = "Jean", Age = 30 };
string json = JsonSerializer.Serialize(personne);
// {"Nom":"Jean","Age":30}
// Options de formatage
var options = new JsonSerializerOptions
{
WriteIndented = true // Format lisible
};
string jsonPretty = JsonSerializer.Serialize(personne, options);
// Désérialiser
string json = "{\"Nom\":\"Jean\",\"Age\":30}";
var p = JsonSerializer.Deserialize<Personne>(json);
Avec classes
public class Personne
{
public string Nom { get; set; }
public int Age { get; set; }
}
var personne = new Personne { Nom = "Jean", Age = 30 };
string json = JsonSerializer.Serialize(personne);
var p = JsonSerializer.Deserialize<Personne>(json);
Attributs pour contrôle
public class Personne
{
[JsonPropertyName("nom")]
public string Nom { get; set; }
[JsonIgnore]
public string MotDePasse { get; set; }
}
Sérialisation binaire
Sérialisation native C# (format binaire).
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
[Serializable]
public class Personne
{
public string Nom { get; set; }
public int Age { get; set; }
}
// Sérialiser
var formatter = new BinaryFormatter();
using (var stream = new FileStream("personne.bin", FileMode.Create))
{
formatter.Serialize(stream, personne);
}
// Désérialiser
using (var stream = new FileStream("personne.bin", FileMode.Open))
{
var p = (Personne)formatter.Deserialize(stream);
}
Note : BinaryFormatter est déprécié pour des raisons de sécurité. Préférez JSON.
Exercice
-
Files API
- Lisez et écrivez des fichiers
- Testez toutes les méthodes
- Gèrez les erreurs
-
Streams
- Utilisez StreamReader/StreamWriter
- Comparez avec File.ReadAllText
- Testez les performances
-
JSON
- Sérialisez/désérialisez des objets
- Testez avec des structures complexes
- Utilisez les options de formatage
-
Sérialisation
- Testez la sérialisation binaire (si nécessaire)
- Comprenez les limitations
- Comparez avec JSON
-
Cas pratique
- Créez un système de sauvegarde/chargement
- Utilisez JSON pour persistance
- Gèrez les erreurs complètement
Quiz
-
Quelle API pour fichiers en C# ?
- FileReader
- File (System.IO)
- InputStream
-
Que fait using avec FileStream ?
- Optimise la lecture
- Ferme automatiquement les ressources
- Gère les exceptions
-
Quelle bibliothèque pour JSON en .NET Core 3.0+ ?
- Newtonsoft.Json
- System.Text.Json (natif)
- json.net
-
Que signifie [JsonIgnore] ?
- Ignore les erreurs JSON
- Ignore la propriété lors de la sérialisation
- Ignore le fichier
-
Quelle méthode lit toutes les lignes ?
- File.Read()
- File.ReadAllLines()
- File.ReadLine()
Mini défi
Mission : Créer un système de sauvegarde/chargement
Créez un système qui sauvegarde et charge des données :
Fonctionnalités :
- Sauvegarde en JSON (System.Text.Json)
- Chargement depuis JSON
- Gestion d'erreurs complète
- Validation des données
- Interface simple
Critères :
- ✅ Utilisation de File API
- ✅ JSON avec System.Text.Json
- ✅ Gestion d'erreurs appropriée
- ✅ Code robuste
Objectif : Maîtriser les fichiers et JSON pour persister des données.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez File, Streams et JSON.