Поделиться через


FileStream.Read Метод

Определение

Перегрузки

Read(Byte[], Int32, Int32)

Выполняет чтение блока байтов из потока и запись данных в заданный буфер.

Read(Span<Byte>)

Считывает последовательность байтов из текущего файлового потока и перемещает позицию внутри файлового потока на число считанных байтов.

Read(Byte[], Int32, Int32)

Исходный код:
FileStream.cs
Исходный код:
FileStream.cs
Исходный код:
FileStream.cs

Выполняет чтение блока байтов из потока и запись данных в заданный буфер.

public:
 override int Read(cli::array <System::Byte> ^ array, int offset, int count);
public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] array, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.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
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Параметры

arraybuffer
Byte[]

Когда этот метод возвращает управление, он содержит указанный массив байтов, в котором значения между offset и (offset + count - 1) заменены байтами, считанными из текущего источника.

offset
Int32

Смещение в байтах в массиве array, в который будут помещены считанные байты.

count
Int32

Максимальное число байтов, предназначенных для чтения.

Возвращаемое значение

Общее количество байтов, считанных в буфер. Оно может быть меньше запрошенного числа байтов, если в настоящее время не имеется нужного количества байтов, или же равно нулю, если достигнут конец потока.

Исключения

array имеет значение null.

offset или count является отрицательным значением.

Поток не поддерживает чтение.

Ошибка ввода/вывода.

offset и count описывают недопустимый диапазон в array.

Методы были вызваны после закрытия потока.

Примеры

В следующем примере содержимое считывается из FileStream и записывается в другой 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

Комментарии

Этот метод переопределяет метод Read.

Параметр offset задает смещение байта в array (индекс буфера), с которого начинается чтение, а count параметр — максимальное количество байтов, которые будут считываться из этого потока. Возвращаемое значение — это фактическое число прочитанных байтов или ноль, если достигнут конец потока. Если операция чтения выполнена успешно, текущая позиция потока будет расширена на количество прочитанных байтов. Если возникает исключение, текущая позиция потока не изменяется.

Метод Read возвращает ноль только после достижения конца потока. В противном Read случае всегда считывает по крайней мере один байт из потока перед возвратом. Если данные из потока не доступны при вызове Readметода , метод блокируется до тех пор, пока не будет возвращен хотя бы один байт данных. Реализация может возвращать меньше байтов, чем запрошено, даже если конец потока не достигнут.

Используется BinaryReader для чтения примитивных типов данных.

Не прерывайте поток, выполняющий операцию чтения. Несмотря на то, что после разблокировки потока приложение может успешно работать, прерывание может снизить производительность и надежность приложения.

Список распространенных операций с файлами и каталогами см. в разделе Общие задачи ввода-вывода.

См. также раздел

Применяется к

Read(Span<Byte>)

Исходный код:
FileStream.cs
Исходный код:
FileStream.cs
Исходный код:
FileStream.cs

Считывает последовательность байтов из текущего файлового потока и перемещает позицию внутри файлового потока на число считанных байтов.

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

Параметры

buffer
Span<Byte>

Область памяти. При возвращении данного метода содержимое этой области заменяется байтами, считанными из текущего файлового потока.

Возвращаемое значение

Общее количество байтов, считанных в буфер. Это число может быть меньше количества выделенных в буфере байтов, если столько байтов в настоящее время недоступно, а также равняться нулю (0), если был достигнут конец потока.

Комментарии

Используйте свойство , CanRead чтобы определить, поддерживает ли текущий экземпляр чтение. Используйте метод для ReadAsync асинхронного чтения из текущего потока.

Этот метод считывает максимум buffer.Length байтов из текущего файлового потока и сохраняет их в buffer. Текущая позиция в потоке файлов расширена по количеству прочитанных байтов; Однако если возникает исключение, текущая позиция в потоке файлов остается неизменной. Метод блокируется до тех пор, пока не будет прочитан хотя бы один байт данных, если данные недоступны. Read возвращает значение 0, только если в потоке файлов больше нет данных и больше не ожидается (например, закрытый сокет или конец файла). Метод может возвращать меньше байтов, чем запрошено, даже если не достигнут конец файлового потока.

Используется BinaryReader для чтения примитивных типов данных.

Применяется к