26
Lesson 26 of 35 ยท Data & Storage

File I/O & Streams

File I/O lets your application read and write data to disk. This lesson covers the File and Directory helper classes, StreamReader/StreamWriter, and async file operations.

Reading and Writing Text Files

The static File class offers one-liners for common operations: ReadAllText, WriteAllText, ReadAllLines, AppendAllText.

File helpers FileHelpers.cs
// Write
File.WriteAllText("notes.txt", "Hello, file system!");

// Append
File.AppendAllText("notes.txt", "\nSecond line.");

// Read
string content = File.ReadAllText("notes.txt");
Console.WriteLine(content);

// Read all lines as array
string[] lines = File.ReadAllLines("notes.txt");
foreach (string line in lines)
    Console.WriteLine($">> {line}");

StreamReader & StreamWriter

For large files, use StreamReader/StreamWriter to process data line by line without loading everything into memory.

Stream IO StreamIO.cs
// Write with StreamWriter
using (var sw = new StreamWriter("data.txt"))
{
    for (int i = 1; i <= 100; i++)
        sw.WriteLine($"Line {i}: {i * i}");
}

// Read with StreamReader
using (var sr = new StreamReader("data.txt"))
{
    string? line;
    while ((line = sr.ReadLine()) != null)
        Console.WriteLine(line);
}

Async File I/O

Use the Async variants to avoid blocking the UI thread: File.ReadAllTextAsync, File.WriteAllTextAsync.

Async file AsyncFile.cs
string text = await File.ReadAllTextAsync("notes.txt");
Console.WriteLine(text.Length);

await File.WriteAllTextAsync("output.txt",
    text.ToUpper());

Working with Directories

Use Directory.CreateDirectory, Directory.GetFiles, Directory.Exists, and Path to manipulate file paths safely.

Directory DirDemo.cs
string folder = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.Desktop), "MyApp");

Directory.CreateDirectory(folder);

foreach (string f in Directory.GetFiles(folder, "*.txt"))
    Console.WriteLine(Path.GetFileName(f));