Dela via


Skapa strömmar

Ett lagringslager är ett lagringsmedium, till exempel en disk eller ett minne. Varje separat lagringsplats implementerar sin egen ström som en implementering av Stream klassen.

Varje strömtyp läser och skriver byte från och till dess angivna lagringsplats. Flöden som ansluter till lagringsplatser kallas för basströmmar. Basströmmar har konstruktorer med de parametrar som krävs för att ansluta strömmen till lagringsplatsen. Till exempel FileStream har konstruktorer som anger en sökvägsparameter, som anger hur filen ska delas av processer.

Klassernas System.IO design ger förenklad strömsammansättning. Du kan koppla basströmmar till en eller flera direktströmmar som tillhandahåller de funktioner du vill ha. Du kan koppla en läsare eller skrivare till slutet av kedjan, så att de önskade typerna enkelt kan läsas eller skrivas.

Följande kodexempel skapar en FileStream runt den befintliga MyFile.txt för att buffrar MyFile.txt. Observera att File Flöden buffrad som standard.

Viktigt!

Exemplen förutsätter att en fil med namnet MyFile.txt redan finns i samma mapp som appen.

Exempel: Använda StreamReader

I följande exempel skapas ett StreamReader för att läsa tecken från FileStream, som skickas till StreamReader som konstruktorargument. StreamReader.ReadLine läser sedan tills StreamReader.Peek inga fler tecken hittas.

using System;
using System.IO;

public class CompBuf
{
    private const string FILE_NAME = "MyFile.txt";

    public static void Main()
    {
        if (!File.Exists(FILE_NAME))
        {
            Console.WriteLine($"{FILE_NAME} does not exist!");
            return;
        }
        // Create an instance of StreamReader characters from the file.
        using (StreamReader sr = new StreamReader(FILE_NAME))
        {
            string input;
            // While not at the end of the file, read lines from the file.
            while (sr.Peek() > -1)
            {
                input = sr.ReadLine();
                Console.WriteLine(input);
            }
        }
    }
}
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($"{FILE_NAME} does not exist!")
            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.
        Using sr As New StreamReader(fsIn)
            Dim input As String
            ' While not at the end of the file, read lines from the file.
            While sr.Peek() > -1
                input = sr.ReadLine()
                Console.WriteLine(input)
            End While
        End Using
    End Sub
End Class

Exempel: Använda BinaryReader

I följande exempel skapas en BinaryReader för att läsa byte från FileStream, som skickas till BinaryReader som konstruktorargument. ReadByte läser sedan tills PeekChar inga fler byte hittas.

using System;
using System.IO;

public class ReadBuf
{
    private const string FILE_NAME = "MyFile.txt";

    public static void Main()
    {
        if (!File.Exists(FILE_NAME))
        {
            Console.WriteLine($"{FILE_NAME} does not exist.");
            return;
        }
        using (FileStream f = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            // Create an instance of BinaryReader that can
            // read bytes from the FileStream.
            using (BinaryReader br = new BinaryReader(f))
            {
                byte input;
                // While not at the end of the file, read lines from the file.
                while (br.PeekChar() > -1)
                {
                    input = br.ReadByte();
                    Console.WriteLine(input);
                }
            }
        }
    }
}
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($"{FILE_NAME} does not exist.")
            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.
        Using br As new BinaryReader(f)
            Dim input As Byte
            ' While not at the end of the file, read lines from the file.
            While br.PeekChar() > -1
                input = br.ReadByte()
                Console.WriteLine(input)
            End While
        End Using
    End Sub
End Class

Se även