StreamReader.ReadToEnd Метод

Определение

Считывает все символы из текущей позиции в конец потока.

public:
 override System::String ^ ReadToEnd();
public override string ReadToEnd();
override this.ReadToEnd : unit -> string
Public Overrides Function ReadToEnd () As String

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

Остальная часть потока в виде строки от текущей позиции до конца. Если текущая позиция находится в конце потока, возвращает пустую строку ("").

Исключения

Недостаточно памяти для выделения буфера для возвращаемой строки.

Возникает ошибка ввода-вывода.

Примеры

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

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 allows you to do one Read operation.
                Console.WriteLine(sr.ReadToEnd());
            }
        }
        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)

            'This allows you to do one Read operation.
            Console.WriteLine(sr.ReadToEnd())
            sr.Close()
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

Комментарии

Этот метод переопределяет метод TextReader.ReadToEnd.

ReadToEnd лучше всего выполнять чтение всех входных данных из текущей позиции в конец потока. Если требуется больше контроля над количеством символов, считывающихся из потока, используйте Read(Char[], Int32, Int32) перегрузку метода, что обычно приводит к повышению производительности.

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

Обратите внимание, что при использовании Read метода более эффективно использовать буфер, который имеет тот же размер, что и внутренний буфер потока. Если размер буфера не определен при создании потока, его размер по умолчанию составляет 4 килобайта (4096 байт).

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

Список распространенных задач ввода-вывода см. в разделе Распространенные задачи ввода-вывода.

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

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