TheDeveloperBlog.com


C# Using TextReader

TextReader reads text characters from a file. It is internally used by many other types in the .NET Framework. But you can access it for a general method of reading text content. It's usually better to use StreamReader in your programs.


Example. Initially here we look at an example of using the TextReader class. We use the using statement with resource acquisition statements, providing for proper cleanup of the system resources related to the operating system and file system.

Tip: You do not need to manually Close or Dispose of files opened inside using statements, because this is done implicitly.

C# program that uses TextReader class

using System;
using System.IO;

class Program
{
    static void Main()
    {
	//
	// Read one line with TextReader.
	//
	using (TextReader reader = File.OpenText(@"C:\perl.txt"))
	{
	    string line = reader.ReadLine();
	    Console.WriteLine(line);
	}
	//
	// Read three text characters with TextReader.
	//
	using (TextReader reader = File.OpenText(@"C:\perl.txt"))
	{
	    char[] block = new char[3];
	    reader.ReadBlock(block, 0, 3);
	    Console.WriteLine(block);
	}
	//
	// Read entire text file with TextReader.
	//
	using (TextReader reader = File.OpenText(@"C:\perl.txt"))
	{
	    string text = reader.ReadToEnd();
	    Console.WriteLine(text.Length);
	}
	//
	// Peek at first character in file with TextReader.
	//
	using (TextReader reader = File.OpenText(@"C:\perl.txt"))
	{
	    char first = (char)reader.Peek();
	    Console.WriteLine(first);
	}
    }
}

Output
    (Output is dependent on the text file read.)

First line
Fir
18
F

The program contains four using-statements with the TextReader object declared in each of them. The using-statement contains a resource acquisition statement that instantiates a read-only locally scoped variable of type TextReader.

Tip: The using-statements ensure that the framework provides for the correct disposal of the unmanaged filesystem resources.

Next, the program shows several instance methods on TextReader. The ReadLine method internally scans the file for the next newline sequence, and then consumes the text up to that point and returns it.

Tip: The result of ReadLine does not contain the newline itself. The newline is kept separate by the Framework.

The ReadBlock method accepts a pre-allocated char[] array and the start index and count parameters. It fills the array parameter's elements internally before returning. The ReadToEnd method returns the entire file as a string.

Peek method. The program also shows the Peek instance parameterless instance method on the TextReader class instance. This method physically examines the file contents, and then returns the very next character that would be read.

However: The Peek method does not alter the location of the read position. It just peeks, without affecting anything else.


TextWriter. The TextWriter class also is an abstract base class that provides functionality for the StreamWriter class. The StreamWriter class implements additional logic for text encodings, making it a more useful class in many cases.

Using TextWriter

StreamReader. The StreamReader class is derived from the TextReader class. The StreamReader class contains additional logic for reading text files with various encodings more correctly. For this reason, StreamReader is usually better for simple uses.

StreamReader

But: If you are trying to create your own reader object, using an instance field that is a TextReader is possibly preferable.


Summary. We explored the TextReader class in the C# programming language targeting the .NET Framework. We can use the using statement with a resource acquisition statement, and then read lines, blocks of text, or entire files into strings.

Review: The Peek method also allows you to preview what the TextReader will read next and where its reading position is.