Sdílet prostřednictvím


StreamReader.Read Metoda

Definice

Přečte další znak nebo další sadu znaků ze vstupního datového proudu.

Přetížení

Read()

Přečte další znak ze vstupního datového proudu a posune pozici znaku o jeden znak.

Read(Span<Char>)

Načte znaky z aktuálního streamu do rozsahu.

Read(Char[], Int32, Int32)

Načte zadané maximum znaků z aktuálního datového proudu do vyrovnávací paměti počínaje zadaným indexem.

Read()

Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs

Přečte další znak ze vstupního datového proudu a posune pozici znaku o jeden znak.

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

Návraty

Další znak ze vstupního datového proudu je reprezentovaný jako Int32 objekt, nebo -1, pokud nejsou k dispozici žádné další znaky.

Výjimky

Dojde k vstupně-výstupní chybě.

Příklady

Následující příklad kódu ukazuje jednoduché použití Read metody .

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

Následující příklad kódu ukazuje čtení jednoho znaku Read() pomocí přetížení metody, formátování celočíselného výstupu ASCII jako desítkové a šestnáctkové.

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

Poznámky

Tato metoda přepíše TextReader.Read.

Tato metoda vrátí celé číslo, takže může vrátit -1, pokud bylo dosaženo konce datového proudu. Pokud budete manipulovat s umístěním podkladového datového proudu po načtení dat do vyrovnávací paměti, nemusí se pozice podkladového datového proudu shodovat s pozicí vnitřní vyrovnávací paměti. Chcete-li resetovat interní vyrovnávací paměť, zavolejte metodu DiscardBufferedData ; tato metoda však zpomaluje výkon a měla by být volána pouze v případě, že je to nezbytně nutné.

Seznam běžných vstupně-výstupních úloh najdete v tématu Běžné vstupně-výstupní úlohy.

Viz také

Platí pro

Read(Span<Char>)

Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs

Načte znaky z aktuálního streamu do rozsahu.

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>

Když tato metoda vrátí, obsahuje zadaný rozsah znaků nahrazen znaky přečtené z aktuálního zdroje.

Návraty

Počet přečtených znaků nebo 0, pokud se na konci streamu nepřečetla žádná data. Číslo bude menší nebo rovno buffer délce v závislosti na tom, jestli jsou data dostupná v rámci datového proudu.

Výjimky

Počet znaků přečtených z datového proudu je větší než buffer délka.

buffer je null.

Platí pro

Read(Char[], Int32, Int32)

Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs

Načte zadané maximum znaků z aktuálního datového proudu do vyrovnávací paměti počínaje zadaným indexem.

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[]

Když se tato metoda vrátí, obsahuje zadané pole znaků s hodnotami mezi index a (index + count - 1) nahrazenými znaky přečtenými z aktuálního zdroje.

index
Int32

Index buffer , ve kterém se má začít psát.

count
Int32

Maximální počet znaků, které se mají přečíst.

Návraty

Počet přečtených znaků nebo 0, pokud se na konci streamu nepřečetla žádná data. Číslo bude menší nebo rovno parametru count v závislosti na tom, jestli jsou data dostupná v rámci datového proudu.

Výjimky

Délka vyrovnávací paměti mínus index je menší než count.

buffer je null.

index nebo count je negativní.

Dojde k vstupně-výstupní chybě, například k zavření datového proudu.

Příklady

Následující příklad kódu přečte pět znaků najednou, dokud se nedosáhne konce souboru.

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

Poznámky

Tato metoda přepíše TextReader.Read.

Tato metoda vrátí celé číslo, takže může vrátit hodnotu 0, pokud bylo dosaženo konce datového proudu.

Při použití Read metody je efektivnější použít vyrovnávací paměť, která má stejnou velikost jako vnitřní vyrovnávací paměť datového proudu, kde je interní vyrovnávací paměť nastavena na požadovanou velikost bloku, a vždy číst méně, než je velikost bloku. Pokud velikost interní vyrovnávací paměti nebyla při vytváření datového proudu zadána, je výchozí velikost 4 kilobajtů (4096 bajtů). Pokud budete manipulovat s umístěním podkladového datového proudu po načtení dat do vyrovnávací paměti, nemusí se pozice podkladového datového proudu shodovat s pozicí vnitřní vyrovnávací paměti. Chcete-li resetovat interní vyrovnávací paměť, zavolejte metodu DiscardBufferedData ; tato metoda však zpomaluje výkon a měla by být volána pouze v případě, že je to nezbytně nutné.

Tato metoda vrátí po načtení počtu znaků zadaných parametrem count nebo po dosažení konce souboru. ReadBlock je blokující verze nástroje Read.

Seznam běžných vstupně-výstupních úloh najdete v tématu Běžné vstupně-výstupní úlohy.

Viz také

Platí pro