Reading text files in C#
last modified January 4, 2023
In this article we show how to read text files in C#.
Input & output in C# is based on streams. A Stream is an
abstract base class of all streams. A stream is an abstraction of a sequence of
bytes, such as a file, an input/output device, an inter-process communication
pipe, or a TCP/IP socket.
C# stream
Stream provides a generic interface to the types of input and
output, and isolate the programmer from the specific details of the operating
system and the underlying devices. For instance, MemoryStream works
with data located in the memory and FileStream with data in a files.
The Battle of Thermopylae was fought between an alliance of Greek city-states, led by King Leonidas of Sparta, and the Persian Empire of Xerxes I over the course of three days, during the second Persian invasion of Greece.
In our examples, we are going to read from this file.
C# read text file with File.ReadLines
The File.ReadLines returns an IEnumerable<string>
of all lines of the file. After finishing the iteration, it closes the file.
It is much less resource-hungry than methods which return the whole data as a
string or as an array of strings.
using System.Text;
var path = "thermopylae.txt";
var enumLines = File.ReadLines(path, Encoding.UTF8);
foreach (var line in enumLines)
{
Console.WriteLine(line);
}
In the example, we go through the enumeration of lines in a foreach loop and print the contents line by line.
C# read text file with File.ReadAllLines
The File.ReadAllLines opens a text file, reads all lines of the
file into a string array, and then closes the file.
File.ReadLines is more efficient than
File.ReadAllLines, especially for larger files.
using System.Text;
var path = "thermopylae.txt";
string[] lines = File.ReadAllLines(path, Encoding.UTF8);
foreach (string line in lines)
{
Console.WriteLine(line);
}
The contents of the thermopylae.txt file are read and printed to
the console using the File.ReadAllLines method.
foreach (string line in lines)
{
Console.WriteLine(line);
}
We loop over the array and print its elements.
C# read text file with File.ReadAllText
The File.ReadAllText method opens a text file, reads all lines of
the file into a string, and then closes the file.
File.ReadAllText method should not
be used for large files. It is only suitable for simple solutions.
using System.Text; var path = "thermopylae.txt"; string content = File.ReadAllText(path, Encoding.UTF8); Console.WriteLine(content);
The example reads the contents of the thermopylae.txt file
and prints them to the console.
C# reading text file with StreamReader
StreamReader is designed for character input in a particular
encoding. It is used for reading lines of information from a standard text file.
Using StreamReader's ReadToEnd
The ReadToEnd method reads all characters from the current
position of the stream to its end.
using System.Text; var path = "thermopylae.txt"; using var fs = new FileStream(path, FileMode.Open, FileAccess.Read); using var sr = new StreamReader(fs, Encoding.UTF8); string content = sr.ReadToEnd(); Console.WriteLine(content);
The example reads a file with the StreamReader's
ReadToEnd method.
using var fs = new FileStream(path, FileMode.Open, FileAccess.Read);
The FileStream class provides a Stream for a file,
supporting both synchronous and asynchronous read and write operations. The
constructor initializes a new instance of the FileStream class with
the specified path, creation mode, and read/write permission.
using var sr = new StreamReader(fs, Encoding.UTF8);
The FileStream is passed to the StreamReader.
string content = sr.ReadToEnd();
StreamReader's ReadToEnd method reads all characters
from the current position to the end of the file.
Using File.OpenRead
There is a File.OpenRead helper method to create a
FileStream.
using System.Text; var path = "thermopylae.txt"; using var fs = File.OpenRead(path); using var sr = new StreamReader(fs, Encoding.UTF8); string content = sr.ReadToEnd(); Console.WriteLine(content);
The example creates a FileStream with File.OpenRead,
passes the stream to StreamReader and reads the text with
ReadToEnd.
Using StreamReader's ReadLine
The ReadLine method of the StreamReader reads a line
of characters from the current stream and returns the data as a string.
using System.Text;
var path = "thermopylae.txt";
using var fs = new FileStream(path, FileMode.Open, FileAccess.Read);
using var sr = new StreamReader(fs, Encoding.UTF8);
string line = String.Empty;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
The code example reads a file line by line.
string line = String.Empty;
while ((line = streamReader.ReadLine()) != null)
{
Console.WriteLine(line);
}
In a while loop, we read the contents of the file line by line with the
StreamReader's ReadLine method.
C# read text with File.OpenText
The File.OpenText method opens an existing UTF-8 encoded text file
for reading. It is a helper method to work with StreamReader
quickly.
using System.Text; var path = "thermopylae.txt"; using StreamReader sr = File.OpenText(path); string content = sr.ReadToEnd(); Console.WriteLine(content);
The example opens a text file with File.OpenText and reads its
contents with ReadToEnd.
C# read text file asynchronously with StreamReader's ReadToEndAsync
The ReadToEndAsync method reads all characters from the current
position to the end of the stream asynchronously and returns them as one string.
using System.Text; var path = "thermopylae.txt"; using var fs = new FileStream(path, FileMode.Open, FileAccess.Read); using var sr = new StreamReader(fs, Encoding.UTF8); string content = await sr.ReadToEndAsync(); Console.WriteLine(content);
In the next example, we read a text file asynchronously.
string content = await sr.ReadToEndAsync();
The await operator is applied to a task in an asynchronous method
to suspend the execution of the method until the awaited task finishes.
In this article, we have read text files in various ways in C#.
List all C# tutorials.