Прочитать на английском

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


FileStream.Read Метод

Определение

Перегрузки

Read(Byte[], Int32, Int32)

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

Read(Span<Byte>)

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

Read(Byte[], Int32, Int32)

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

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

C#
public override int Read (byte[] array, int offset, int count);
C#
public override int Read (byte[] buffer, int offset, int count);

Параметры

arraybuffer
Byte[]

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

offset
Int32

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

count
Int32

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

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

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

Исключения

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

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

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

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

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

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

Примеры

В следующем примере содержимое считывается из FileStream и записывается в другой FileStream.

C#
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);
    }
}
}

Комментарии

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

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

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

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

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

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

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Read(Span<Byte>)

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

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

C#
public override int Read (Span<byte> buffer);

Параметры

buffer
Span<Byte>

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

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

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

Комментарии

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

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

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1