Aller au contenu principal

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

  1. Files API

    • Lisez et écrivez des fichiers
    • Testez toutes les méthodes
    • Gèrez les erreurs
  2. Streams

    • Utilisez StreamReader/StreamWriter
    • Comparez avec File.ReadAllText
    • Testez les performances
  3. JSON

    • Sérialisez/désérialisez des objets
    • Testez avec des structures complexes
    • Utilisez les options de formatage
  4. Sérialisation

    • Testez la sérialisation binaire (si nécessaire)
    • Comprenez les limitations
    • Comparez avec JSON
  5. Cas pratique

    • Créez un système de sauvegarde/chargement
    • Utilisez JSON pour persistance
    • Gèrez les erreurs complètement

Quiz

  1. Quelle API pour fichiers en C# ?

    • FileReader
    • File (System.IO)
    • InputStream
  2. Que fait using avec FileStream ?

    • Optimise la lecture
    • Ferme automatiquement les ressources
    • Gère les exceptions
  3. Quelle bibliothèque pour JSON en .NET Core 3.0+ ?

    • Newtonsoft.Json
    • System.Text.Json (natif)
    • json.net
  4. Que signifie [JsonIgnore] ?

    • Ignore les erreurs JSON
    • Ignore la propriété lors de la sérialisation
    • Ignore le fichier
  5. 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 :

  1. Sauvegarde en JSON (System.Text.Json)
  2. Chargement depuis JSON
  3. Gestion d'erreurs complète
  4. Validation des données
  5. 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.