Partager via


Composition de flux

Un magasin de sauvegarde correspond à un support de stockage tel qu'un disque ou la mémoire. Chaque magasin de sauvegarde implémente son propre flux en tant qu'implémentation de la classe Stream. Chaque type de flux lit les octets à partir de son magasin de sauvegarde donné ou les y écrit. Les flux qui se connectent à des magasins de sauvegarde sont appelés flux de base. Les flux de base possèdent des constructeurs qui ont les paramètres requis pour connecter le flux au magasin de sauvegarde. Par exemple, FileStream a des constructeurs spécifiant un paramètre d'accès, qui indique la façon dont le fichier est partagé par les processus, etc.

Le design des classes System.IO offre une composition simplifiée des flux. Les flux de base peuvent être associés à un ou plusieurs flux directs fournissant la fonctionnalité souhaitée. Un lecteur ou un writer peut être attaché en fin de chaîne afin de pouvoir aisément lire ou écrire les types préférés.

L'exemple de code suivant crée FileStream à partir du fichier MyFile.txt existant afin de placer MyFile.txt en mémoire tampon. (Notez que les objets FileStream sont mis par défaut en mémoire tampon.) Ensuite, l'objet StreamReader est créé pour lire les caractères depuis l'objet FileStream, lequel est passé à StreamReader en tant qu'argument de son constructeur. ReadLine poursuit la lecture jusqu'à ce que Peek ne détecte plus aucun caractère.

Option Explicit On 
Option Strict On
Imports System
Imports System.IO
Public Class CompBuf
    Private Const FILE_NAME As String = "MyFile.txt"
    Public Shared Sub Main()
        If Not File.Exists(FILE_NAME) Then
            Console.WriteLine("{0} does not exist!", FILE_NAME)
            Return
        End If
        Dim fsIn As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read, FileShare.Read)
        ' Create an instance of StreamReader that can read 
        ' characters from the FileStream.
        Dim sr As New StreamReader(fsIn)
        ' While not at the end of the file, read lines from the file.
        While sr.Peek() > -1
            Dim input As String = sr.ReadLine()
            Console.WriteLine(input)
        End While
        sr.Close()
    End Sub
End Class
using System;
using System.IO;
public class CompBuf 
{
    private const string FILE_NAME = "MyFile.txt";
    public static void Main(String[] args) 
    {
        if (!File.Exists(FILE_NAME)) 
        {
            Console.WriteLine("{0} does not exist!", FILE_NAME);
            return;
        }
        FileStream fsIn = new FileStream(FILE_NAME, FileMode.Open,
            FileAccess.Read, FileShare.Read);
        // Create an instance of StreamReader that can read 
        // characters from the FileStream.
        StreamReader sr = new StreamReader(fsIn); 
        // While not at the end of the file, read lines from the file.
        while (sr.Peek()>-1) 
        {
            String input = sr.ReadLine();
            Console.WriteLine (input);
        }
        sr.Close();
    }
}

L'exemple de code suivant crée FileStream à partir du fichier MyFile.txt existant afin de placer MyFile.txt en mémoire tampon. (Notez que les objets FileStream sont mis par défaut en mémoire tampon.) Ensuite, l'objet BinaryReader est créé pour lire les caractères à partir de l'objet FileStream, lequel est passé à BinaryReader en tant qu'argument de son constructeur. ReadByte poursuit la lecture jusqu'à ce que PeekChar ne détecte plus aucun octet.

Option Explicit On 
Option Strict On
Imports System
Imports System.IO
Public Class ReadBuf
    Private Const FILE_NAME As String = "MyFile.txt"
    Public Shared Sub Main()
        If Not File.Exists(FILE_NAME) Then
            Console.WriteLine("{0} does not exist.", FILE_NAME)
            Return
        End If
        Dim f As New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read,
            FileShare.Read)
        ' Create an instance of BinaryReader that can 
        ' read bytes from the FileStream.
        Dim sr As New BinaryReader(f)
        ' While not at the end of the file, read lines from the file.
        While sr.PeekChar() > -1
            Dim input As Byte = sr.ReadByte()
            Console.WriteLine(input)
        End While
        sr.Close()
    End Sub
End Class
using System;
using System.IO;
public class ReadBuf 
{
    private const string FILE_NAME = "MyFile.txt";
    public static void Main(String[] args) 
    {
        if (!File.Exists(FILE_NAME)) 
        {
            Console.WriteLine("{0} does not exist.", FILE_NAME);
            return;
        }
        FileStream f = new FileStream(FILE_NAME, FileMode.Open,
            FileAccess.Read, FileShare.Read);
        // Create an instance of BinaryReader that can 
        // read bytes from the FileStream.
        BinaryReader sr = new BinaryReader(f); 
        // While not at the end of the file, read lines from the file.
        while (sr.PeekChar()>-1) 
        {
            byte input = sr.ReadByte();
            Console.WriteLine (input);
        }
        sr.Close();
    }
}

Voir aussi

Référence

StreamReader
StreamReader.ReadLine
StreamReader.Peek
FileStream
BinaryReader
BinaryReader.ReadByte
BinaryReader.PeekChar

Concepts

E/S de fichier de base
Création d'un writer