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));