StreamReader.Read Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Считывает следующий символ или следующий набор символов из входного потока.
Перегрузки
| Имя | Описание |
|---|---|
| Read() |
Считывает следующий символ из входного потока и перемещает позицию символа по одному символу. |
| Read(Span<Char>) |
Считывает символы из текущего потока в диапазон. |
| Read(Char[], Int32, Int32) |
Считывает указанный максимум символов из текущего потока в буфер, начиная с указанного индекса. |
Read()
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
Считывает следующий символ из входного потока и перемещает позицию символа по одному символу.
public:
override int Read();
public override int Read();
override this.Read : unit -> int
Public Overrides Function Read () As Integer
Возвращаемое значение
Следующий символ из входного потока, представленный Int32 как объект, или -1, если больше символов нет.
Исключения
Возникает ошибка ввода-вывода.
Примеры
В следующем примере кода демонстрируется простое использование Read метода.
using System;
using System.IO;
class Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";
try
{
if (File.Exists(path))
{
File.Delete(path);
}
using (StreamWriter sw = new StreamWriter(path))
{
sw.WriteLine("This");
sw.WriteLine("is some text");
sw.WriteLine("to test");
sw.WriteLine("Reading");
}
using (StreamReader sr = new StreamReader(path))
{
while (sr.Peek() >= 0)
{
Console.Write((char)sr.Read());
}
}
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}
Imports System.IO
Imports System.Text
Public Class Test
Public Shared Sub Main()
Dim path As String = "c:\temp\MyTest.txt"
Try
If File.Exists(path) Then
File.Delete(path)
End If
Dim sw As StreamWriter = New StreamWriter(path)
sw.WriteLine("This")
sw.WriteLine("is some text")
sw.WriteLine("to test")
sw.WriteLine("Reading")
sw.Close()
Dim sr As StreamReader = New StreamReader(path)
Do While sr.Peek() >= 0
Console.Write(Convert.ToChar(sr.Read()))
Loop
sr.Close()
Catch e As Exception
Console.WriteLine("The process failed: {0}", e.ToString())
End Try
End Sub
End Class
В следующем примере кода показано чтение одного символа с помощью Read() перегрузки метода, форматирование целочисленных выходных данных ASCII в виде десятичного и шестнадцатеричного.
using System;
using System.IO;
class StrmRdrRead
{
public static void Main()
{
//Create a FileInfo instance representing an existing text file.
FileInfo MyFile=new FileInfo(@"c:\csc.txt");
//Instantiate a StreamReader to read from the text file.
StreamReader sr=MyFile.OpenText();
//Read a single character.
int FirstChar=sr.Read();
//Display the ASCII number of the character read in both decimal and hexadecimal format.
Console.WriteLine("The ASCII number of the first character read is {0:D} in decimal and {1:X} in hexadecimal.",
FirstChar, FirstChar);
//
sr.Close();
}
}
Imports System.IO
Class StrmRdrRead
Public Shared Sub Main()
'Create a FileInfo instance representing an existing text file.
Dim MyFile As New FileInfo("c:\csc.txt")
'Instantiate a StreamReader to read from the text file.
Dim sr As StreamReader = MyFile.OpenText()
'Read a single character.
Dim FirstChar As Integer = sr.Read()
'Display the ASCII number of the character read in both decimal and hexadecimal format.
Console.WriteLine("The ASCII number of the first character read is {0:D} in decimal and {1:X} in hexadecimal.", FirstChar, FirstChar)
sr.Close()
End Sub
End Class
Комментарии
Этот метод переопределяет метод TextReader.Read.
Этот метод возвращает целое число, чтобы оно могло возвращать -1, если достигнут конец потока. Если вы управляете положением базового потока после чтения данных в буфер, позиция базового потока может не совпадать с положением внутреннего буфера. Чтобы сбросить внутренний буфер, вызовите DiscardBufferedData метод. Однако этот метод замедляет производительность и должен вызываться только при абсолютной необходимости.
Список распространенных задач ввода-вывода см. в разделе Распространенные задачи ввода-вывода.
См. также раздел
- Файловый и потоковый ввод-вывод
- Практическое руководство. Чтение текста из файла
- Практическое руководство. Запись текста в файл
Применяется к
Read(Span<Char>)
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
Считывает символы из текущего потока в диапазон.
public:
override int Read(Span<char> buffer);
public override int Read(Span<char> buffer);
override this.Read : Span<char> -> int
Public Overrides Function Read (buffer As Span(Of Char)) As Integer
Параметры
При возврате этого метода содержит указанный диапазон символов, замененных символами, считываемыми из текущего источника.
Возвращаемое значение
Число символов, которые были прочитаны или 0, если в конце потока и данные не были прочитаны. Число будет меньше или равно buffer длине в зависимости от того, доступны ли данные в потоке.
Исключения
Число символов, считываемых из потока, больше buffer длины.
buffer равно null.
Применяется к
Read(Char[], Int32, Int32)
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
- Исходный код:
- StreamReader.cs
Считывает указанный максимум символов из текущего потока в буфер, начиная с указанного индекса.
public:
override int Read(cli::array <char> ^ buffer, int index, int count);
public override int Read(char[] buffer, int index, int count);
override this.Read : char[] * int * int -> int
Public Overrides Function Read (buffer As Char(), index As Integer, count As Integer) As Integer
Параметры
- buffer
- Char[]
При возврате этого метода содержит указанный массив символов со значениями между index и (index + count - 1), замененными символами, считываемыми из текущего источника.
- index
- Int32
Индекс, buffer с которого начинается запись.
- count
- Int32
Максимальное число символов для чтения.
Возвращаемое значение
Число символов, которые были прочитаны или 0, если в конце потока и данные не были прочитаны. Число будет меньше или равно count параметру в зависимости от того, доступны ли данные в потоке.
Исключения
Длина буфера минус index меньше count.
buffer равно null.
index или count отрицательный.
Возникает ошибка ввода-вывода, например поток закрыт.
Примеры
Следующий пример кода считывает пять символов за раз, пока не будет достигнут конец файла.
using System;
using System.IO;
class Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";
try
{
if (File.Exists(path))
{
File.Delete(path);
}
using (StreamWriter sw = new StreamWriter(path))
{
sw.WriteLine("This");
sw.WriteLine("is some text");
sw.WriteLine("to test");
sw.WriteLine("Reading");
}
using (StreamReader sr = new StreamReader(path))
{
//This is an arbitrary size for this example.
char[] c = null;
while (sr.Peek() >= 0)
{
c = new char[5];
sr.ReadBlock(c, 0, c.Length);
//The output will look odd, because
//only five characters are read at a time.
Console.WriteLine(c);
}
}
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}
Imports System.IO
Imports System.Text
Public Class Test
Public Shared Sub Main()
Dim path As String = "c:\temp\MyTest.txt"
Try
If File.Exists(path) Then
File.Delete(path)
End If
Dim sw As StreamWriter = New StreamWriter(path)
sw.WriteLine("This")
sw.WriteLine("is some text")
sw.WriteLine("to test")
sw.WriteLine("Reading")
sw.Close()
Dim sr As StreamReader = New StreamReader(path)
Do While sr.Peek() >= 0
'This is an arbitrary size for this example.
Dim c(5) As Char
sr.ReadBlock(c, 0, c.Length)
'The output will look odd, because
'only five characters are read at a time.
Console.WriteLine(c)
Loop
sr.Close()
Catch e As Exception
Console.WriteLine("The process failed: {0}", e.ToString())
End Try
End Sub
End Class
Комментарии
Этот метод переопределяет метод TextReader.Read.
Этот метод возвращает целое число, чтобы оно могло возвращать значение 0, если достигнут конец потока.
При использовании Read метода более эффективно использовать буфер, который имеет тот же размер, что и внутренний буфер потока, где внутренний буфер устанавливается в нужный размер блока и всегда считывается меньше размера блока. Если размер внутреннего буфера не указан при построении потока, его размер по умолчанию составляет 4 килобайта (4096 байт). Если вы управляете положением базового потока после чтения данных в буфер, позиция базового потока может не совпадать с положением внутреннего буфера. Чтобы сбросить внутренний буфер, вызовите DiscardBufferedData метод. Однако этот метод замедляет производительность и должен вызываться только при абсолютной необходимости.
Этот метод возвращается после того, как число символов, указанных count параметром, считывается или достигается конец файла.
ReadBlock — это блокирующая версия Read.
Список распространенных задач ввода-вывода см. в разделе Распространенные задачи ввода-вывода.
См. также раздел
- Файловый и потоковый ввод-вывод
- Практическое руководство. Чтение текста из файла
- Практическое руководство. Запись текста в файл