StreamReader.ReadToEnd Yöntem

Tanım

Geçerli konumdan akışın sonuna kadar olan tüm karakterleri okur.

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

Döndürülenler

Geçerli konumdan sona kadar akışın geri kalanı bir dize olarak. Geçerli konum akışın sonundaysa boş bir dize ("") döndürür.

Özel durumlar

Döndürülen dize için arabellek ayırmaya yetecek bellek yok.

Bir G/Ç hatası oluşur.

Örnekler

Aşağıdaki kod örneği tek bir işlemde dosyanın sonuna kadar okur.

using namespace System;
using namespace System::IO;
int main()
{
   String^ path = "c:\\temp\\MyTest.txt";
   try
   {
      if ( File::Exists( path ) )
      {
         File::Delete( path );
      }
      StreamWriter^ sw = gcnew StreamWriter( path );
      try
      {
         sw->WriteLine( "This" );
         sw->WriteLine( "is some text" );
         sw->WriteLine( "to test" );
         sw->WriteLine( "Reading" );
      }
      finally
      {
         delete sw;
      }

      StreamReader^ sr = gcnew StreamReader( path );
      try
      {
         //This allows you to do one Read operation.
         Console::WriteLine( sr->ReadToEnd() );
      }
      finally
      {
         delete sr;
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }
}
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

Açıklamalar

Bu yöntem geçersiz kılar TextReader.ReadToEnd.

ReadToEnd geçerli konumdan akışın sonuna kadar tüm girişleri okumanız gerektiğinde en iyi şekilde çalışır. Akıştan kaç karakterin okunduğu üzerinde daha fazla denetim gerekiyorsa, genellikle daha iyi performansa neden olan yöntem aşırı yüklemesini kullanın Read(Char[], Int32, Int32) .

ReadToEnd akışın ne zaman sona erdiğini bildiğini varsayar. Sunucunun yalnızca siz istediğinizde veri gönderdiği ve bağlantıyı kapatmadığı etkileşimli protokoller için, ReadToEnd sonu olmadığından süresiz olarak engellenebilir ve bundan kaçınılmalıdır.

yöntemini kullanırken, akışın Read iç arabelleğiyle aynı boyutta bir arabellek kullanmanın daha verimli olduğunu unutmayın. Akış oluşturulduğunda arabelleğin boyutu belirtilmemişse, varsayılan boyutu 4 kilobayttır (4096 bayt).

Geçerli yöntem bir OutOfMemoryExceptionoluşturursa, okuyucunun temel nesnedeki Stream konumu yöntemin okuyabildiği karakter sayısıyla gelişmiştir, ancak iç ReadLine arabelleğe zaten okunan karakterler atılır. Verileri arabelleğe okuduktan sonra temel alınan akışın konumunu işlerseniz, temel alınan akışın konumu iç arabelleğin konumuyla eşleşmeyebilir. İç arabelleği sıfırlamak için yöntemini çağırın DiscardBufferedData ; ancak bu yöntem performansı yavaşlatıyor ve yalnızca kesinlikle gerekli olduğunda çağrılmalıdır.

Yaygın G/Ç görevlerinin listesi için bkz. Ortak G/Ç Görevleri.

Şunlara uygulanır

Ayrıca bkz.