File Handling in C#
Intermediate
25 min read
Lesson 4 of 4
Introduction to File Handling
C# provides powerful file handling capabilities through the System.IO namespace. You can read, write, and manipulate files easily.
Basic File Operations
Writing to a File
using System.IO;
// Method 1: Using File.WriteAllText (overwrites file)
File.WriteAllText("example.txt", "Hello World!");
// Method 2: Using File.AppendAllText (adds to file)
File.AppendAllText("example.txt", "\nThis is appended text.");
// Method 3: Using StreamWriter
using (StreamWriter writer = new StreamWriter("example.txt"))
{
writer.WriteLine("Line 1");
writer.WriteLine("Line 2");
writer.WriteLine("Line 3");
}
Reading from a File
// Method 1: Read all text at once
string content = File.ReadAllText("example.txt");
Console.WriteLine(content);
// Method 2: Read all lines into array
string[] lines = File.ReadAllLines("example.txt");
foreach (string line in lines)
Console.WriteLine(line);
// Method 3: Using StreamReader
using (StreamReader reader = new StreamReader("example.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
Console.WriteLine(line);
}
File Operations Example
using System;
using System.IO;
class FileManager
{
public static void CreateFile(string path, string content)
{
File.WriteAllText(path, content);
Console.WriteLine($"File created: {path}");
}
public static void AppendToFile(string path, string content)
{
File.AppendAllText(path, content + "\n");
Console.WriteLine($"Content appended to: {path}");
}
public static void ReadFile(string path)
{
if (File.Exists(path))
{
string content = File.ReadAllText(path);
Console.WriteLine($"Content of {path}:");
Console.WriteLine(content);
}
else
{
Console.WriteLine($"File not found: {path}");
}
}
public static void CopyFile(string source, string destination)
{
if (File.Exists(source))
{
File.Copy(source, destination, true);
Console.WriteLine($"File copied from {source} to {destination}");
}
else
{
Console.WriteLine($"Source file not found: {source}");
}
}
public static void DeleteFile(string path)
{
if (File.Exists(path))
{
File.Delete(path);
Console.WriteLine($"File deleted: {path}");
}
else
{
Console.WriteLine($"File not found: {path}");
}
}
}
class Program
{
static void Main()
{
string filePath = "data.txt";
// Create file
FileManager.CreateFile(filePath, "This is the initial content.");
// Append content
FileManager.AppendToFile(filePath, "Appended line 1");
FileManager.AppendToFile(filePath, "Appended line 2");
// Read file
FileManager.ReadFile(filePath);
// Copy file
FileManager.CopyFile(filePath, "backup.txt");
// Delete file
FileManager.DeleteFile("backup.txt");
}
}
Working with Directories
using System.IO;
// Create directory
Directory.CreateDirectory("MyFolder");
// Get all files in directory
string[] files = Directory.GetFiles(".");
foreach (string file in files)
Console.WriteLine(file);
// Get all subdirectories
string[] directories = Directory.GetDirectories(".");
foreach (string dir in directories)
Console.WriteLine(dir);
// Check if directory exists
if (Directory.Exists("MyFolder"))
Console.WriteLine("Folder exists!");
// Delete directory
Directory.Delete("MyFolder", true); // true for recursive delete
File Information
using System.IO;
FileInfo fileInfo = new FileInfo("example.txt");
Console.WriteLine($"Name: {fileInfo.Name}");
Console.WriteLine($"Full Name: {fileInfo.FullName}");
Console.WriteLine($"Size: {fileInfo.Length} bytes");
Console.WriteLine($"Created: {fileInfo.CreationTime}");
Console.WriteLine($"Modified: {fileInfo.LastWriteTime}");
Console.WriteLine($"Read-Only: {fileInfo.IsReadOnly}");
// Change file attributes
fileInfo.Attributes = FileAttributes.Normal;
Best Practices
- Always use try-catch blocks for file operations
- Use using statements for StreamReader/Writer
- Check if files/directories exist before operations
- Handle exceptions gracefully
- Use Path.Combine for path operations
Reading CSV Files
using System.IO;
using System.Linq;
// Read CSV file
var lines = File.ReadAllLines("data.csv");
foreach (var line in lines)
{
var values = line.Split(',');
Console.WriteLine($"Name: {values[0]}, Age: {values[1]}, City: {values[2]}");
}
Key Takeaway
File handling is essential for data persistence. Master the System.IO namespace to read, write, and manage files effectively.
Exercise
Create a console application that:
- Reads a CSV file with student data (Name, Score, Grade)
- Calculates the average score
- Writes the results to a new text file
- Handles file not found errors gracefully