C# Entrée et sortie de fichiers

aFichierEst une collection de données stockée sur le disque avec un nom et un chemin de répertoire spécifiés. Lorsqu'un fichier est ouvert en lecture et en écriture, il devient unflux。

Fondamentalement, un flux est une séquence d'octets transmise via un chemin de communication. Il existe deux flux principaux :flux d'entréeetflux de sortie。flux d'entréeUtilisé pour lire des données à partir d'un fichier (opérations de lecture),flux de sortieUtilisé pour écrire des données dans un fichier (opérations d'écriture).

Classes d'E/S C#

L'espace de noms System.IO dispose de diverses classes pour effectuer diverses opérations sur les fichiers, telles que la création et la suppression de fichiers, la lecture ou l'écriture de fichiers, la fermeture de fichiers, etc.

Le tableau suivant répertorie quelques classes non abstraites couramment utilisées dans l'espace de noms System.IO :

Classe d'E/SDescription
BinaryReaderLit des données brutes à partir d'un flux binaire.
BinaryWriterÉcrit des données brutes au format binaire.
BufferedStreamStockage temporaire pour les flux d'octets.
RépertoireFacilite les opérations sur la structure des répertoires.
DirectoryInfoUtilisé pour effectuer des opérations sur les répertoires.
DriveInfoFournit des informations sur les lecteurs.
FichierAide au traitement des fichiers.
FileInfoUtilisé pour effectuer des opérations sur les fichiers.
FileStreamUtilisé pour la lecture et l'écriture à n'importe quelle position dans un fichier.
MemoryStreamUtilisé pour l'accès aléatoire aux flux de données stockés en mémoire.
CheminEffectue des opérations sur les informations de chemin.
StreamReaderUtilisé pour lire des caractères à partir d'un flux d'octets.
StreamWriterUtilisé pour écrire des caractères dans un flux.
StringReaderUtilisé pour lire une mémoire tampon de chaîne.
StringWriterUtilisé pour écrire dans une mémoire tampon de chaîne.

Classe FileStream

Dans l'espace de noms System.IO,FileStreamLa classe facilite la lecture, l'écriture et la fermeture de fichiers. Cette classe dérive de la classe abstraite Stream.

Vous devez créer un objetFileStreampour créer un nouveau fichier, ou ouvrir un fichier existant. Pour créer unFileStream, la syntaxe de l'objet est la suivante :

FileStream <object_name> = new FileStream( <file_name>,
<FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);

Par exemple, créez un objet FileStreamFpour lire un fichier nommésample.txtFichier :

FileStream F = new FileStream("sample.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
ParamètreDescription
FileMode

FileModeL'énumération définit diverses méthodes d'ouverture de fichiers. Les membres de l'énumération FileMode sont :

  • Append: Ouvre un fichier existant et place le curseur à la fin du fichier. Si le fichier n'existe pas, il crée le fichier.
  • Create: Crée un nouveau fichier. Si le fichier existe déjà, il supprime l'ancien fichier puis crée un nouveau fichier.
  • CreateNew: Spécifie que le système d'exploitation doit créer un nouveau fichier. Si le fichier existe déjà, une exception est levée.
  • Open: Ouvre un fichier existant. Si le fichier n'existe pas, une exception est levée.
  • OpenOrCreate: Spécifie que le système d'exploitation doit ouvrir un fichier existant. Si le fichier n'existe pas, il crée un nouveau fichier avec le nom spécifié et l'ouvre.
  • Truncate: Ouvre un fichier existant et le tronque à une taille de zéro octet une fois ouvert. Nous pouvons alors écrire des données entièrement nouvelles dans le fichier, mais la date de création initiale du fichier est conservée. Si le fichier n'existe pas, une exception est levée.
FileAccess

FileAccessLes membres de l'énumération sont :Read、ReadWriteetWrite。

FileShare

FileShareLes membres de l'énumération sont :

  • Inheritable: Permet au handle de fichier d'être hérité par les processus enfants. Win32 ne prend pas directement en charge cette fonctionnalité.
  • None: Refuse le partage du fichier actuel. Avant que le fichier ne soit fermé, toute demande d'ouverture du fichier (qu'elle provienne de ce processus ou d'un autre) échouera.
  • Read: Autorise l'ouverture ultérieure du fichier en lecture. Si cet indicateur n'est pas spécifié, toute demande d'ouverture du fichier en lecture (effectuée par ce processus ou un autre) échouera avant que le fichier ne soit fermé. Toutefois, même si cet indicateur est spécifié, des autorisations supplémentaires peuvent encore être nécessaires pour accéder au fichier.
  • ReadWrite: Autorise l'ouverture ultérieure du fichier en lecture ou en écriture. Si cet indicateur n'est pas spécifié, toute demande d'ouverture du fichier en lecture ou en écriture (effectuée par ce processus ou un autre) échouera avant que le fichier ne soit fermé. Toutefois, même si cet indicateur est spécifié, des autorisations supplémentaires peuvent encore être nécessaires pour accéder au fichier.
  • Write: Autorise l'ouverture ultérieure du fichier en écriture. Si cet indicateur n'est pas spécifié, toute demande d'ouverture du fichier en écriture (effectuée par ce processus ou un autre) échouera avant que le fichier ne soit fermé. Toutefois, même si cet indicateur est spécifié, des autorisations supplémentaires peuvent encore être nécessaires pour accéder au fichier.
  • Delete: Permet la suppression ultérieure du fichier.

Exemple

Le programme suivant illustre l'utilisation de la classeFileStream:

Exemple

using System;
using System.IO;

namespace FileIOApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            FileStream F = new FileStream("test.dat",
            FileMode.OpenOrCreate, FileAccess.ReadWrite);

            for (int i = 1; i <= 20; i++)
            {
                F.WriteByte((byte)i);
            }

            F.Position = 0;

            for (int i = 0; i <= 20; i++)
            {
                Console.Write(F.ReadByte() + " ");
            }
            F.Close();
            Console.ReadKey();
        }
    }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1

Opérations avancées sur les fichiers en C#

Les exemples ci-dessus illustrent des opérations simples sur les fichiers en C#. Toutefois, pour exploiter pleinement les fonctionnalités puissantes des classes System.IO de C#, vous devez connaître les propriétés et méthodes couramment utilisées de ces classes.

Dans les sections suivantes, nous aborderons ces classes et les opérations qu'elles effectuent. Veuillez cliquer sur les liens pour en savoir plus sur chaque partie :

sujetDescription
Lecture et écriture de fichiers texteCela implique la lecture et l'écriture de fichiers texte.StreamReaderetStreamWriterLa classe aide à réaliser la lecture et l'écriture de fichiers texte.
Lecture et écriture de fichiers binairesCela implique la lecture et l'écriture de fichiers binaires.BinaryReaderetBinaryWriterLa classe facilite la lecture et l'écriture de fichiers binaires.
Opérations sur le système de fichiers WindowsIl permet aux programmeurs C# de parcourir et de localiser les fichiers et répertoires Windows.
autres extensions