C# Text File Input/Output

C# provides classes in the System.IO namespace for working with files. This note covers reading and writing text files.

Reading Text Files

The simplest way to read all lines from a text file is using the File.ReadAllLines() method:

string[] lines = File.ReadAllLines("my_file.txt");
foreach (string line in lines) {
  Console.WriteLine(line);
}

For more control, you can use a StreamReader to read the file line by line:

using (StreamReader reader = new StreamReader("my_file.txt")) {
  string line;
  while ((line = reader.ReadLine()) != null) {
    Console.WriteLine(line);
  }
}

The using statement ensures that the StreamReader is properly disposed of, even if exceptions occur.

Writing Text Files

The easiest way to write all lines to a text file is using File.WriteAllLines():

string[] lines = { "Line 1", "Line 2", "Line 3" };
File.WriteAllLines("output.txt", lines);

For more control, use a StreamWriter:

using (StreamWriter writer = new StreamWriter("output.txt")) {
  writer.WriteLine("This is the first line.");
  writer.WriteLine("This is the second line.");
  // ... more writing ...
}

You can also append to a file using the File.AppendAllText or by opening a `StreamWriter` in append mode:

File.AppendAllText("output.txt", "This line is appended.\n");

using (StreamWriter writer = new StreamWriter("output.txt", true)) { // true for append mode
  writer.WriteLine("Another appended line.");
}

Checking if a File Exists

Use File.Exists() to check if a file exists before attempting to open it:

if (File.Exists("my_file.txt")) {
  // ... read the file ...
} else {
  Console.WriteLine("File not found.");
}

Example

using System;
using System.IO;

public class FileIOExample {
  public static void Main(string[] args) {
    try {
      string[] linesToWrite = { "Line 1", "Line 2", "Line 3" };
      File.WriteAllLines("my_output.txt", linesToWrite);

      if (File.Exists("my_output.txt")) {
        string[] readLines = File.ReadAllLines("my_output.txt");
        Console.WriteLine("Contents of my_output.txt:");
        foreach (string line in readLines) {
          Console.WriteLine(line);
        }
      }

    } catch (Exception ex) {
      Console.WriteLine("An error occurred: " + ex.Message);
    }
  }
}