FileStream.Read Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
| Имя | Описание |
|---|---|
| Read(Byte[], Int32, Int32) |
Считывает блок байтов из потока и записывает данные в заданный буфер. |
| Read(Span<Byte>) |
Считывает последовательность байтов из текущего потока файлов и перемещает позицию в потоке файлов по количеству байтов, считываемых. |
Read(Byte[], Int32, Int32)
- Исходный код:
- FileStream.cs
- Исходный код:
- FileStream.cs
- Исходный код:
- 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
- Исходный код:
- 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
Параметры
Область памяти. При возврате этого метода содержимое этого региона заменяется байтами, считываемыми из текущего потока файлов.
Возвращаемое значение
Общее количество байтов, считываемых в буфер. Это может быть меньше числа байтов, выделенных в буфере, если в данный момент не доступно много байтов или ноль (0), если достигнут конец потока.
Комментарии
CanRead Используйте свойство, чтобы определить, поддерживает ли текущий экземпляр чтение. ReadAsync Используйте метод для асинхронного чтения из текущего потока.
Этот метод считывает максимум buffer.Length байтов из текущего потока файлов и сохраняет их в buffer. Текущая позиция в потоке файлов расширена по числу байтов, считываемых; Однако если возникает исключение, текущая позиция в потоке файлов остается неизменной. Метод блокируется до тех пор, пока не будет прочитан хотя бы один байт данных, в случае отсутствия данных.
Read возвращает значение 0, только если в потоке файлов больше нет данных и больше не ожидается (например, закрытый сокет или конец файла). Метод может возвращать меньше байтов, чем запрошено, даже если конец потока файлов не достигнут.
Используется BinaryReader для чтения примитивных типов данных.