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