StreamReader.Read Método

Definición

Lee el siguiente carácter o conjunto de caracteres de la secuencia de entrada.

Sobrecargas

Read()

Lee el siguiente carácter de la secuencia de entrada y hace avanzar la posición de los caracteres en un carácter.

Read(Span<Char>)

Lee los caracteres de la secuencia actual en un intervalo.

Read(Char[], Int32, Int32)

Lee un máximo especificado de caracteres de la secuencia actual en un búfer, comenzando en el índice especificado.

Read()

Lee el siguiente carácter de la secuencia de entrada y hace avanzar la posición de los caracteres en un carácter.

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

Devoluciones

Int32

El siguiente carácter de la secuencia de entrada que se representa como un objeto Int32, o -1 si no hay más caracteres disponibles.

Excepciones

Error de E/S.

Ejemplos

En el ejemplo de código siguiente se muestra un uso sencillo del Read método .

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

En el ejemplo de código siguiente se muestra la lectura de un solo carácter mediante la sobrecarga del método , con el Read() formato de la salida de entero ASCII como decimal y hexadecimal.

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

Comentarios

Este método invalida TextReader.Read.

Este método devuelve un entero para que pueda devolver -1 si se ha alcanzado el final de la secuencia. Si manipula la posición de la secuencia subyacente después de leer los datos en el búfer, es posible que la posición de la secuencia subyacente no coincida con la posición del búfer interno. Para restablecer el búfer interno, llame al método ; sin embargo, este método ralentiza el DiscardBufferedData rendimiento y solo se debe llamar cuando sea absolutamente necesario.

Para obtener una lista de las tareas de E/S comunes, consulte Tareas de E/S comunes.

Consulte también

Se aplica a

Read(Span<Char>)

Lee los caracteres de la secuencia actual en un intervalo.

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

Parámetros

buffer
Span<Char>

Cuando este método devuelve un valor, contiene el intervalo especificado de caracteres reemplazados por los caracteres leídos del origen actual.

Devoluciones

Int32

Número de caracteres leídos. Si se llega al final de la secuencia y no se leyó ningún dato es 0. El número será menor o igual que la longitud de buffer, en función de si los datos están disponibles dentro de la secuencia.

Excepciones

El número de caracteres leídos de la secuencia es mayor que la longitud de buffer.

buffer es null.

Se aplica a

Read(Char[], Int32, Int32)

Lee un máximo especificado de caracteres de la secuencia actual en un búfer, comenzando en el índice especificado.

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

Parámetros

buffer
Char[]

Cuando este método devuelve un valor, contiene la matriz de caracteres especificada con los valores comprendidos entre index y (índice + recuento - 1) reemplazada por los caracteres leídos del origen actual.

index
Int32

Índice de buffer en el que comenzará la escritura.

count
Int32

Número máximo de caracteres que se van a leer.

Devoluciones

Int32

Número de caracteres leídos. Si se llega al final de la secuencia y no se leyó ningún dato es 0. El número será menor o igual que el parámetro count, dependiendo de si los datos están disponibles dentro de la secuencia.

Excepciones

La longitud del búfer menos index es menor que count.

buffer es null.

index o count es negativo.

Se produce un error de E/S, como que se cierra la secuencia.

Ejemplos

En el ejemplo de código siguiente se leen cinco caracteres cada vez hasta que se alcanza el final del archivo.

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

Comentarios

Este método invalida TextReader.Read.

Este método devuelve un entero para que pueda devolver 0 si se ha alcanzado el final de la secuencia.

Al usar el Read método , es más eficaz usar un búfer con el mismo tamaño que el búfer interno de la secuencia, donde el búfer interno se establece en el tamaño de bloque deseado y para leer siempre menos que el tamaño del bloque. Si el tamaño del búfer interno no se especificó cuando se construyó la secuencia, su tamaño predeterminado es de 4 kilobytes (4096 bytes). Si manipula la posición de la secuencia subyacente después de leer los datos en el búfer, es posible que la posición de la secuencia subyacente no coincida con la posición del búfer interno. Para restablecer el búfer interno, llame al método ; sin embargo, este método ralentiza el DiscardBufferedData rendimiento y solo se debe llamar cuando sea absolutamente necesario.

Este método devuelve después de leer el número de caracteres especificados por el count parámetro o del final del archivo. ReadBlock es una versión de bloqueo de Read.

Para obtener una lista de las tareas de E/S comunes, consulte Tareas de E/S comunes.

Consulte también

Se aplica a