2/19/2021 StreamReader Class (System.
IO) | Microsoft Docs
Namespace: System.IO
Assembly: System.Runtime.dll
Implements a TextReader that reads characters from a byte stream in a particular encoding.
In this article
Definition
Examples
Remarks
Constructors
Fields
Properties
Methods
Explicit Interface Implementations
Applies to
See also
C# = Copy
public class StreamReader : System.IO.TextReader
Inheritance Object 9 MarshalByRefObject 9 TextReader 9 StreamReader
Examples
The following example uses an instance of StreamReader to read text from a file. The
constructor used in this example is not supported for use in Windows Store Apps.
C# = Copy
using System;
using System.IO;
class Test
{
public static void Main()
{
try
{
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader("TestFile.txt"))
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 1/8
2/19/2021 StreamReader Class (System.IO) | Microsoft Docs
{
string line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
}
The following example instantiates a StreamReader object and calls its ReadAsync method
to read a file asynchronously.
C# = Copy
using System;
using System.IO;
using System.Threading.Tasks;
class Example
{
static async Task Main()
{
await ReadAndDisplayFilesAsync();
}
static async Task ReadAndDisplayFilesAsync()
{
String filename = "TestFile1.txt";
Char[] buffer;
using (var sr = new StreamReader(filename)) {
buffer = new Char[(int)sr.BaseStream.Length];
await sr.ReadAsync(buffer, 0, (int)sr.BaseStream.Length);
}
Console.WriteLine(new String(buffer));
}
}
// The example displays the following output:
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 2/8
2/19/2021 StreamReader Class (System.IO) | Microsoft Docs
// This is the first line of text in a relatively short file.
// This is the second line.
// This is the third line.
// This is the fourth and final line.
Remarks
StreamReader is designed for character input in a particular encoding, whereas the Stream
class is designed for byte input and output. Use StreamReader for reading lines of
information from a standard text file.
) Important
This type implements the IDisposable interface. When you have finished using the
type, you should dispose of it either directly or indirectly. To dispose of the type
directly, call its Dispose method in a try / catch block. To dispose of it indirectly, use a
language construct such as using (in C#) or Using (in Visual Basic). For more
information, see the "Using an Object that Implements IDisposable" section in the
IDisposable interface topic.
StreamReader defaults to UTF-8 encoding unless specified otherwise, instead of defaulting
to the ANSI code page for the current system. UTF-8 handles Unicode characters correctly
and provides consistent results on localized versions of the operating system. If you get the
current character encoding using the CurrentEncoding property, the value is not reliable
until after the first Read method, since encoding auto detection is not done until the first
call to a Read method.
By default, a StreamReader is not thread safe. See TextReader.Synchronized for a thread-
safe wrapper.
The Read(Char[], Int32, Int32) and Write(Char[], Int32, Int32) method overloads read and
write the number of characters specified by the count parameter. These are to be
distinguished from BufferedStream.Read and BufferedStream.Write, which read and write
the number of bytes specified by the count parameter. Use the BufferedStream methods
only for reading and writing an integral number of byte array elements.
7 Note
Wh di f St it i ffi i t t
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 b ff th t i th i 3/8
2/19/2021 StreamReader Class (System.IO) | Microsoft Docs
When reading from a Stream, it is more efficient to use a buffer that is the same size
as the internal buffer of the stream.
For a list of common I/O tasks, see Common I/O Tasks.
Constructors
StreamReader(Stream) Initializes a new instance of the StreamReader class for the
specified stream.
StreamReader(Stream, Boolean) Initializes a new instance of the StreamReader class for the
specified stream, with the specified byte order mark detection
option.
StreamReader(Stream, Initializes a new instance of the StreamReader class for the
Encoding) specified stream, with the specified character encoding.
StreamReader(Stream, Initializes a new instance of the StreamReader class for the
Encoding, Boolean) specified stream, with the specified character encoding and byte
order mark detection option.
StreamReader(Stream, Initializes a new instance of the StreamReader class for the
Encoding, Boolean, Int32) specified stream, with the specified character encoding, byte
order mark detection option, and buffer size.
StreamReader(Stream, Initializes a new instance of the StreamReader class for the
Encoding, Boolean, Int32, specified stream based on the specified character encoding, byte
Boolean) order mark detection option, and buffer size, and optionally
leaves the stream open.
StreamReader(String) Initializes a new instance of the StreamReader class for the
specified file name.
StreamReader(String, Boolean) Initializes a new instance of the StreamReader class for the
specified file name, with the specified byte order mark detection
option.
StreamReader(String, Encoding) Initializes a new instance of the StreamReader class for the
specified file name, with the specified character encoding.
StreamReader(String, Encoding, Initializes a new instance of the StreamReader class for the
Boolean) specified file name, with the specified character encoding and
byte order mark detection option.
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 4/8
2/19/2021 StreamReader Class (System.IO) | Microsoft Docs
y p
StreamReader(String, Encoding, Initializes a new instance of the StreamReader class for the
Boolean, Int32) specified file name, with the specified character encoding, byte
order mark detection option, and buffer size.
Fields
Null A StreamReader object around an empty stream.
Properties
BaseStream Returns the underlying stream.
CurrentEncoding Gets the current character encoding that the current
StreamReader object is using.
EndOfStream Gets a value that indicates whether the current stream position
is at the end of the stream.
Methods
Close() Closes the StreamReader object and the underlying stream, and
releases any system resources associated with the reader.
CreateObjRef(Type) Creates an object that contains all the relevant information
required to generate a proxy used to communicate with a
remote object.
(Inherited from MarshalByRefObject)
DiscardBufferedData() Clears the internal buffer.
Dispose() Releases all resources used by the TextReader object.
(Inherited from TextReader)
Dispose(Boolean) Closes the underlying stream, releases the unmanaged resources
used by the StreamReader, and optionally releases the managed
resources.
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 5/8
2/19/2021 StreamReader Class (System.IO) | Microsoft Docs
Equals(Object) Determines whether the specified object is equal to the current
object.
(Inherited from Object)
GetHashCode() Serves as the default hash function.
(Inherited from Object)
GetLifetimeService() Obsolete.
Retrieves the current lifetime service object that controls the
lifetime policy for this instance.
(Inherited from MarshalByRefObject)
GetType() Gets the Type of the current instance.
(Inherited from Object)
InitializeLifetimeService() Obsolete.
Obtains a lifetime service object to control the lifetime policy for
this instance.
(Inherited from MarshalByRefObject)
MemberwiseClone() Creates a shallow copy of the current Object.
(Inherited from Object)
MemberwiseClone(Boolean) Creates a shallow copy of the current MarshalByRefObject
object.
(Inherited from MarshalByRefObject)
Peek() Returns the next available character but does not consume it.
Read() Reads the next character from the input stream and advances
the character position by one character.
Read(Char[], Int32, Int32) Reads a specified maximum of characters from the current
stream into a buffer, beginning at the specified index.
Read(Span<Char>) Reads the characters from the current stream into a span.
ReadAsync(Char[], Int32, Int32) Reads a specified maximum number of characters from the
current stream asynchronously and writes the data to a buffer,
beginning at the specified index.
ReadAsync(Memory<Char>, Asynchronously reads the characters from the current stream
CancellationToken) into a memory block.
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 6/8
2/19/2021 StreamReader Class (System.IO) | Microsoft Docs
ReadBlock(Char[], Int32, Int32) Reads a specified maximum number of characters from the
current stream and writes the data to a buffer, beginning at the
specified index.
ReadBlock(Span<Char>) Reads the characters from the current stream and writes the
data to a buffer.
ReadBlockAsync(Char[], Int32, Reads a specified maximum number of characters from the
Int32) current stream asynchronously and writes the data to a buffer,
beginning at the specified index.
ReadBlock Asynchronously reads the characters from the current stream
Async(Memory<Char>, and writes the data to a buffer.
CancellationToken)
ReadLine() Reads a line of characters from the current stream and returns
the data as a string.
ReadLineAsync() Reads a line of characters asynchronously from the current
stream and returns the data as a string.
ReadToEnd() Reads all characters from the current position to the end of the
stream.
ReadToEndAsync() Reads all characters from the current position to the end of the
stream asynchronously and returns them as one string.
ToString() Returns a string that represents the current object.
(Inherited from Object)
Explicit Interface Implementations
IDisposable.Dispose() For a description of this member, see Dispose().
(Inherited from TextReader)
Applies to
Product Versions
.NET 5.0
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 7/8
2/19/2021 StreamReader Class (System.IO) | Microsoft Docs
.NET Core 1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0
Xamarin.Android 7.1
Xamarin.iOS 10.8
Xamarin.Mac 3.0
See also
Encoding
Stream
StreamWriter
File and Stream I/O
How to: Read Text from a File
How to: Write Text to a File
How to: Read and Write to a Newly Created Data File
Is this page helpful?
Yes No
https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader?view=net-5.0 8/8