StreamReader.Read Methode

Definition

Liest das nächste Zeichen oder die nächste Gruppe von Zeichen aus dem Eingabestream.

Überlädt

Read()

Liest das nächste Zeichen aus dem Eingabestream und verschiebt die Zeichenposition um ein Zeichen nach vorn.

Read(Span<Char>)

Liest die Zeichen aus dem aktuellen Datenstrom in eine Spanne.

Read(Char[], Int32, Int32)

Liest vom aktuellen Stream ein angegebenes Maximum von Zeichen in einen Puffer ein und beginnt dabei am angegebenen Index.

Read()

Quelle:
StreamReader.cs
Quelle:
StreamReader.cs
Quelle:
StreamReader.cs

Liest das nächste Zeichen aus dem Eingabestream und verschiebt die Zeichenposition um ein Zeichen nach vorn.

public:
 override int Read();
public override int Read ();
override this.Read : unit -> int
Public Overrides Function Read () As Integer

Gibt zurück

Das nächste Zeichen im Eingabestream wird als Int32-Objekt dargestellt, oder -1, wenn keine weiteren Zeichen verfügbar sind.

Ausnahmen

Ein E/A-Fehler tritt auf.

Beispiele

Im folgenden Codebeispiel wird eine einfache Verwendung der Read -Methode veranschaulicht.

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
      {
         while ( sr->Peek() >= 0 )
         {
            Console::Write( (Char)sr->Read() );
         }
      }
      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))
            {
                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

Im folgenden Codebeispiel wird das Lesen eines einzelnen Zeichens mithilfe der Read() Methodenüberladung veranschaulicht, wobei die ASCII-Ganzzahlausgabe als dezimal und hexadezimal formatiert wird.

using namespace System;
using namespace System::IO;
int main()
{
   
   //Create a FileInfo instance representing an existing text file.
   FileInfo^ MyFile = gcnew 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();
}
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

Hinweise

Diese Methode überschreibt TextReader.Read.

Diese Methode gibt eine ganze Zahl zurück, sodass sie -1 zurückgeben kann, wenn das Ende des Datenstroms erreicht wurde. Wenn Sie die Position des zugrunde liegenden Datenstroms nach dem Lesen von Daten in den Puffer ändern, stimmt die Position des zugrunde liegenden Datenstroms möglicherweise nicht mit der Position des internen Puffers überein. Um den internen Puffer zurückzusetzen, rufen Sie die -Methode auf. Diese Methode verlangsamt jedoch die DiscardBufferedData Leistung und sollte nur aufgerufen werden, wenn dies unbedingt erforderlich ist.

Eine Liste allgemeiner E/A-Aufgaben finden Sie unter Allgemeine E/A-Aufgaben.

Weitere Informationen

Gilt für:

Read(Span<Char>)

Quelle:
StreamReader.cs
Quelle:
StreamReader.cs
Quelle:
StreamReader.cs

Liest die Zeichen aus dem aktuellen Datenstrom in eine Spanne.

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

Parameter

buffer
Span<Char>

Enthält nach dem Beenden dieser Methode die angegebene Zeichenspanne, die durch die aus der aktuellen Quelle gelesenen Zeichen ersetzt wurde

Gibt zurück

Die Anzahl der gelesenen Zeichen, bzw. 0 (null), wenn das Ende des Streams erreicht ist und keine Daten gelesen wurden. Die Anzahl ist kleiner oder gleich der buffer-Länge, abhängig davon, ob die Daten im Datenstrom verfügbar sind.

Ausnahmen

Die Anzahl der aus dem Datenstrom gelesenen Zeichen ist größer als die buffer-Länge.

buffer ist null.

Gilt für:

Read(Char[], Int32, Int32)

Quelle:
StreamReader.cs
Quelle:
StreamReader.cs
Quelle:
StreamReader.cs

Liest vom aktuellen Stream ein angegebenes Maximum von Zeichen in einen Puffer ein und beginnt dabei am angegebenen Index.

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

Parameter

buffer
Char[]

Enthält nach dem Beenden dieser Methode das angegebene Zeichenarray mit den Werten zwischen index und (index + count - 1), die durch die aus der aktuellen Quelle gelesenen Zeichen ersetzt wurden.

index
Int32

Der Index von buffer, bei dem mit dem Schreiben begonnen wird.

count
Int32

Die maximale Anzahl der zu lesenden Zeichen.

Gibt zurück

Die Anzahl der gelesenen Zeichen, bzw. 0 (null), wenn das Ende des Streams erreicht ist und keine Daten gelesen wurden. Die Anzahl ist gleich dem count-Parameter oder kleiner, abhängig davon, ob die Daten im Stream verfügbar sind.

Ausnahmen

Die Pufferlänge minus index ist kleiner als count.

buffer ist null.

index oder count ist ein negativer Wert.

Ein E/A-Fehler tritt auf, der Stream wird z. B. geschlossen.

Beispiele

Im folgenden Codebeispiel werden fünf Zeichen gleichzeitig gelesen, bis das Ende der Datei erreicht ist.

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 is an arbitrary size for this example.
         array<Char>^c = nullptr;
         while ( sr->Peek() >= 0 )
         {
            c = gcnew array<Char>(5);
            sr->Read( c, 0, c->Length );
            
            //The output will look odd, because
            //only five characters are read at a time.
            Console::WriteLine( c );
         }
      }
      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 is an arbitrary size for this example.
                char[] c = null;

                while (sr.Peek() >= 0)
                {
                    c = new char[5];
                    sr.Read(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.Read(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

Hinweise

Diese Methode überschreibt TextReader.Read.

Diese Methode gibt eine ganze Zahl zurück, sodass sie 0 zurückgeben kann, wenn das Ende des Datenstroms erreicht wurde.

Wenn Sie die Read -Methode verwenden, ist es effizienter, einen Puffer mit der gleichen Größe wie der interne Puffer des Datenstroms zu verwenden, wobei der interne Puffer auf die gewünschte Blockgröße festgelegt ist und immer weniger als die Blockgröße gelesen wird. Wenn die Größe des internen Puffers beim Erstellen des Datenstroms nicht angegeben wurde, beträgt die Standardgröße 4 KB (4096 Bytes). Wenn Sie die Position des zugrunde liegenden Datenstroms nach dem Lesen von Daten in den Puffer ändern, stimmt die Position des zugrunde liegenden Datenstroms möglicherweise nicht mit der Position des internen Puffers überein. Um den internen Puffer zurückzusetzen, rufen Sie die -Methode auf. Diese Methode verlangsamt jedoch die DiscardBufferedData Leistung und sollte nur aufgerufen werden, wenn dies unbedingt erforderlich ist.

Diese Methode gibt zurück, nachdem entweder die vom count Parameter angegebene Anzahl von Zeichen gelesen oder das Ende der Datei erreicht wurde. ReadBlock ist eine blockierende Version von Read.

Eine Liste allgemeiner E/A-Aufgaben finden Sie unter Allgemeine E/A-Aufgaben.

Weitere Informationen

Gilt für: