StreamReader.Read Metoda

Definicja

Odczytuje następny znak lub następny zestaw znaków ze strumienia wejściowego.Reads the next character or next set of characters from the input stream.

Przeciążenia

Read()

Odczytuje następny znak ze strumienia wejściowego i przesuwa pozycję znaku o jeden znak.Reads the next character from the input stream and advances the character position by one character.

Read(Span<Char>)

Odczytuje znaki z bieżącego strumienia do zakresu.Reads the characters from the current stream into a span.

Read(Char[], Int32, Int32)

Odczytuje określoną liczbę znaków z bieżącego strumienia do buforu, rozpoczynając od określonego indeksu.Reads a specified maximum of characters from the current stream into a buffer, beginning at the specified index.

Read()

Odczytuje następny znak ze strumienia wejściowego i przesuwa pozycję znaku o jeden znak.Reads the next character from the input stream and advances the character position by one character.

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

Zwraca

Int32

Następny znak ze strumienia wejściowego reprezentowany jako Int32 obiekt lub-1, jeśli nie ma więcej znaków.The next character from the input stream represented as an Int32 object, or -1 if no more characters are available.

Wyjątki

Wystąpi błąd We/Wy.An I/O error occurs.

Przykłady

Poniższy przykład kodu demonstruje proste użycie Read metody.The following code example demonstrates a simple use of the Read method.

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

Poniższy przykład kodu ilustruje odczytywanie pojedynczego znaku przy użyciu Read() przeciążenia metody, formatowanie danych wyjściowych ASCII w postaci dziesiętnej i szesnastkowej.The following code example demonstrates reading a single character using the Read() method overload, formatting the ASCII integer output as decimal and 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

Uwagi

Ta metoda przesłania TextReader.Read .This method overrides TextReader.Read.

Ta metoda zwraca liczbę całkowitą, aby można było zwrócić wartość-1, jeśli osiągnięto koniec strumienia.This method returns an integer so that it can return -1 if the end of the stream has been reached. W przypadku manipulowania pozycją źródłowego strumienia po odczytaniu danych do bufora pozycja strumienia podstawowego może nie odpowiadać pozycji buforu wewnętrznego.If you manipulate the position of the underlying stream after reading data into the buffer, the position of the underlying stream might not match the position of the internal buffer. Aby zresetować bufor wewnętrzny, wywołaj DiscardBufferedData metodę, jednak ta metoda spowalnia wydajność i powinna zostać wywołana tylko wtedy, gdy jest to absolutnie konieczne.To reset the internal buffer, call the DiscardBufferedData method; however, this method slows performance and should be called only when absolutely necessary.

Aby uzyskać listę typowych zadań we/wy, zobacz typowe zadania we/wy.For a list of common I/O tasks, see Common I/O Tasks.

Dotyczy

Read(Span<Char>)

Odczytuje znaki z bieżącego strumienia do zakresu.Reads the characters from the current stream into a span.

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

Parametry

buffer
Span<Char>

Gdy ta metoda zwraca, zawiera określony zakres znaków zastępowanych przez znaki odczytane z bieżącego źródła.When this method returns, contains the specified span of characters replaced by the characters read from the current source.

Zwraca

Int32

Liczba znaków, które zostały odczytane lub 0 Jeśli na końcu strumienia i żadne dane nie zostały odczytane.The number of characters that have been read, or 0 if at the end of the stream and no data was read. Liczba będzie mniejsza lub równa buffer długości, w zależności od tego, czy dane są dostępne w strumieniu.The number will be less than or equal to the buffer length, depending on whether the data is available within the stream.

Wyjątki

Liczba znaków odczytanych ze strumienia jest większa niż buffer Długość.The number of characters read from the stream is larger than the buffer length.

buffer to null.buffer is null.

Dotyczy

Read(Char[], Int32, Int32)

Odczytuje określoną liczbę znaków z bieżącego strumienia do buforu, rozpoczynając od określonego indeksu.Reads a specified maximum of characters from the current stream into a buffer, beginning at the specified 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

Parametry

buffer
Char[]

Gdy ta metoda zwraca, zawiera określoną tablicę znaków z wartościami między index i (index + count-1) zastąpione przez znaki odczytywane z bieżącego źródła.When this method returns, contains the specified character array with the values between index and (index + count - 1) replaced by the characters read from the current source.

index
Int32

Indeks, buffer pod którym rozpocznie się zapisywanie.The index of buffer at which to begin writing.

count
Int32

Maksymalna liczba znaków do odczytania.The maximum number of characters to read.

Zwraca

Int32

Liczba znaków, które zostały odczytane lub 0 Jeśli na końcu strumienia i żadne dane nie zostały odczytane.The number of characters that have been read, or 0 if at the end of the stream and no data was read. Liczba będzie mniejsza lub równa count parametrowi, w zależności od tego, czy dane są dostępne w strumieniu.The number will be less than or equal to the count parameter, depending on whether the data is available within the stream.

Wyjątki

Długość buforu minus index jest mniejsza niż count .The buffer length minus index is less than count.

buffer to null.buffer is null.

index lub count jest ujemna.index or count is negative.

Wystąpił błąd we/wy, taki jak strumień jest zamknięty.An I/O error occurs, such as the stream is closed.

Przykłady

Poniższy przykład kodu odczytuje pięć znaków jednocześnie do momentu osiągnięcia końca pliku.The following code example reads five characters at a time until the end of the file is reached.

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

Uwagi

Ta metoda przesłania TextReader.Read .This method overrides TextReader.Read.

Ta metoda zwraca liczbę całkowitą, dzięki czemu może zwrócić wartość 0, jeśli osiągnięto koniec strumienia.This method returns an integer so that it can return 0 if the end of the stream has been reached.

W przypadku korzystania z Read metody, bardziej wydajne jest użycie bufora o takim samym rozmiarze jak wewnętrzny bufor strumienia, gdzie bufor wewnętrzny jest ustawiony na żądany rozmiar bloku i zawsze odczytywany mniej niż rozmiar bloku.When using the Read method, it is more efficient to use a buffer that is the same size as the internal buffer of the stream, where the internal buffer is set to your desired block size, and to always read less than the block size. Jeśli rozmiar buforu wewnętrznego nie został określony, gdy strumień został skonstruowany, jego domyślny rozmiar to 4 kilobajty (4096 bajtów).If the size of the internal buffer was unspecified when the stream was constructed, its default size is 4 kilobytes (4096 bytes). W przypadku manipulowania pozycją źródłowego strumienia po odczytaniu danych do bufora pozycja strumienia podstawowego może nie odpowiadać pozycji buforu wewnętrznego.If you manipulate the position of the underlying stream after reading data into the buffer, the position of the underlying stream might not match the position of the internal buffer. Aby zresetować bufor wewnętrzny, wywołaj DiscardBufferedData metodę, jednak ta metoda spowalnia wydajność i powinna zostać wywołana tylko wtedy, gdy jest to absolutnie konieczne.To reset the internal buffer, call the DiscardBufferedData method; however, this method slows performance and should be called only when absolutely necessary.

Ta metoda wraca po odczytaniu liczby znaków określonej przez count parametr lub osiągnięciu końca pliku.This method returns after either the number of characters specified by the count parameter are read, or the end of the file is reached. ReadBlock jest blokującą wersją programu Read .ReadBlock is a blocking version of Read.

Aby uzyskać listę typowych zadań we/wy, zobacz typowe zadania we/wy.For a list of common I/O tasks, see Common I/O Tasks.

Dotyczy