FileStream.Read Metod

Definition

Överlagringar

Name Description
Read(Byte[], Int32, Int32)

Läser ett block med byte från strömmen och skriver data i en viss buffert.

Read(Span<Byte>)

Läser en sekvens med byte från den aktuella filströmmen och ökar positionen i filströmmen med antalet lästa byte.

Read(Byte[], Int32, Int32)

Läser ett block med byte från strömmen och skriver data i en viss buffert.

public:
 override int Read(cli::array <System::Byte> ^ array, int offset, int count);
public override int Read(byte[] array, int offset, int count);
override this.Read : byte[] * int * int -> int
abstract member Read : byte[] * int * int -> int
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (array As Byte(), offset As Integer, count As Integer) As Integer

Parametrar

array
Byte[]

När den här metoden returnerar, innehåller den angivna bytematrisen med värdena mellan offset och (countoffset + - 1) ersatta av byteen som lästs från den aktuella källan.

offset
Int32

Byteförskjutningen som läsbytena ska placeras i array .

count
Int32

Det maximala antalet byte som ska läsas.

Returer

Det totala antalet byte som lästs in i bufferten. Detta kan vara mindre än antalet byte som begärs om det antalet byte inte är tillgängligt för närvarande eller noll om strömmens slut nås.

Undantag

array är null.

offset eller count är negativ.

Strömmen stöder inte läsning.

Ett I/O-fel uppstod.

offset och count beskriva ett ogiltigt intervall i array.

Metoder anropades efter att strömmen stängdes.

Exempel

I följande exempel läss innehållet från en FileStream och skrivs till en annan FileStream.

using System;
using System.IO;

class Test
{

public static void Main()
{
    // Specify a file to read from and to create.
    string pathSource = @"c:\tests\source.txt";
    string pathNew = @"c:\tests\newfile.txt";

    try
    {

        using (FileStream fsSource = new FileStream(pathSource,
            FileMode.Open, FileAccess.Read))
        {

            // Read the source file into a byte array.
            byte[] bytes = new byte[fsSource.Length];
            int numBytesToRead = (int)fsSource.Length;
            int numBytesRead = 0;
            while (numBytesToRead > 0)
            {
                // Read may return anything from 0 to numBytesToRead.
                int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);

                // Break when the end of the file is reached.
                if (n == 0)
                    break;

                numBytesRead += n;
                numBytesToRead -= n;
            }
             numBytesToRead = bytes.Length;

            // Write the byte array to the other FileStream.
            using (FileStream fsNew = new FileStream(pathNew,
                FileMode.Create, FileAccess.Write))
            {
                fsNew.Write(bytes, 0, numBytesToRead);
            }
        }
    }
    catch (FileNotFoundException ioEx)
    {
        Console.WriteLine(ioEx.Message);
    }
}
}
open System.IO

// Specify a file to read from and to create.
let pathSource = @"c:\tests\source.txt"
let pathNew = @"c:\tests\newfile.txt"

try
    use fsSource = new FileStream(pathSource, FileMode.Open, FileAccess.Read)

    // Read the source file into a byte array.
    let mutable numBytesToRead = int fsSource.Length
    let bytes = numBytesToRead |> Array.zeroCreate
    let mutable numBytesRead = 0

    while numBytesToRead > 0 do
        // Read may return anything from 0 to numBytesToRead.
        let n = fsSource.Read(bytes, numBytesRead, numBytesToRead)

        // Break when the end of the file is reached.
        if n <> 0 then
            numBytesRead <- numBytesRead + n
            numBytesToRead <- numBytesToRead - n

    let numBytesToRead = bytes.Length

    // Write the byte array to the other FileStream.
    use fsNew = new FileStream(pathNew, FileMode.Create, FileAccess.Write)
    fsNew.Write(bytes, 0, numBytesToRead)
with :? FileNotFoundException as ioEx ->
    printfn $"{ioEx.Message}"
Imports System.IO
Class Test
    
Public Shared Sub Main()
    ' Specify a file to read from and to create.
    Dim pathSource As String = "c:\tests\source.txt"
    Dim pathNew As String = "c:\tests\newfile.txt"
    Try 
        Using fsSource As FileStream = New FileStream(pathSource, _
            FileMode.Open, FileAccess.Read)
            ' Read the source file into a byte array.
                Dim bytes() As Byte = New Byte((fsSource.Length) - 1) {}
                Dim numBytesToRead As Integer = CType(fsSource.Length,Integer)
                Dim numBytesRead As Integer = 0

                While (numBytesToRead > 0)
                    ' Read may return anything from 0 to numBytesToRead.
                    Dim n As Integer = fsSource.Read(bytes, numBytesRead, _
                        numBytesToRead)
                    ' Break when the end of the file is reached.
                    If (n = 0) Then
                        Exit While
                    End If
                    numBytesRead = (numBytesRead + n)
                    numBytesToRead = (numBytesToRead - n)

                End While
            numBytesToRead = bytes.Length

            ' Write the byte array to the other FileStream.
            Using fsNew As FileStream = New FileStream(pathNew, _
                FileMode.Create, FileAccess.Write)
                fsNew.Write(bytes, 0, numBytesToRead)
            End Using
        End Using
    Catch ioEx As FileNotFoundException
        Console.WriteLine(ioEx.Message)
    End Try
End Sub
End Class

Kommentarer

Den här metoden åsidosätter Read.

Parametern offset ger förskjutningen av byte i array (buffertindexet) där du kan börja läsa, och parametern count ger det maximala antalet byte som ska läsas från den här strömmen. Det returnerade värdet är det faktiska antalet lästa byte eller noll om strömmens slut nås. Om läsåtgärden lyckas avanceras strömmens aktuella position med antalet lästa byte. Om ett undantag inträffar ändras strömmens aktuella position.

Metoden Read returnerar endast noll efter att ha nått slutet av dataströmmen. Annars Read läser alltid minst en byte från strömmen innan den returneras. Om inga data är tillgängliga från strömmen vid ett anrop till Readblockeras metoden tills minst en byte data kan returneras. En implementering kan returnera färre byte än vad som begärts även om dataströmmens slut inte har nåtts.

Används BinaryReader för att läsa primitiva datatyper.

Avbryt inte en tråd som utför en läsåtgärd. Även om programmet kan verka fungera när tråden har avblockerats kan avbrottet minska programmets prestanda och tillförlitlighet.

En lista över vanliga fil- och katalogåtgärder finns i Vanliga I/O-uppgifter.

Se även

Gäller för

Read(Span<Byte>)

Läser en sekvens med byte från den aktuella filströmmen och ökar positionen i filströmmen med antalet lästa byte.

public:
 override int Read(Span<System::Byte> buffer);
public override int Read(Span<byte> buffer);
override this.Read : Span<byte> -> int
Public Overrides Function Read (buffer As Span(Of Byte)) As Integer

Parametrar

buffer
Span<Byte>

En region med minne. När den här metoden returnerar ersätts innehållet i den här regionen med byteen som läse från den aktuella filströmmen.

Returer

Det totala antalet byte som lästs in i bufferten. Detta kan vara mindre än antalet byte som allokerats i bufferten om så många byte för närvarande inte är tillgängliga eller noll (0) om strömmens slut har nåtts.

Kommentarer

Använd egenskapen CanRead för att avgöra om den aktuella instansen stöder läsning. ReadAsync Använd metoden för att läsa asynkront från den aktuella strömmen.

Den här metoden läser maximalt antal buffer.Length byte från den aktuella filströmmen och lagrar dem i buffer. Den aktuella positionen i filströmmen avanceras av antalet lästa byte. Men om ett undantag inträffar förblir den aktuella positionen i filströmmen oförändrad. Metoden blockeras tills minst en byte data kan läsas, i händelse av att inga data är tillgängliga. Read returnerar endast 0 när det inte finns fler data i filströmmen och inget mer förväntas (till exempel en sluten socket eller filslut). Metoden kan returnera färre byte än vad som begärts även om filströmmens slut inte har nåtts.

Används BinaryReader för att läsa primitiva datatyper.

Gäller för