File Handling in C# - Textnotes

File Handling in C#


File handling in C# allows you to read from and write to files, manage directories, and handle data in various formats (text, CSV, JSON, binary).

1. Reading & Writing Text Files

1.1 Using File Class (Simplest Way)


using System;
using System.IO;

class Program
{
static void Main()
{
string path = "example.txt";

// Writing to file
File.WriteAllText(path, "Hello C# File Handling!");

// Reading from file
string content = File.ReadAllText(path);
Console.WriteLine(content);
}
}

1.2 Using StreamWriter and StreamReader


using System;
using System.IO;

class Program
{
static void Main()
{
string path = "data.txt";

// Write multiple lines
using (StreamWriter sw = new StreamWriter(path))
{
sw.WriteLine("Line 1");
sw.WriteLine("Line 2");
}

// Read all lines
using (StreamReader sr = new StreamReader(path))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}

1.3 Reading & Writing CSV Files


string csvPath = "data.csv";

// Writing CSV
string[] csvLines = { "ID,Name,Age", "1,John,25", "2,Alice,30" };
File.WriteAllLines(csvPath, csvLines);

// Reading CSV
string[] lines = File.ReadAllLines(csvPath);
foreach (string line in lines)
Console.WriteLine(line);

2. FileStream

FileStream provides low-level file access for reading/writing bytes.


using System;
using System.IO;

class Program
{
static void Main()
{
string path = "file.dat";

// Writing bytes
byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello FileStream!");
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
{
fs.Write(data, 0, data.Length);
}

// Reading bytes
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
string content = System.Text.Encoding.UTF8.GetString(buffer);
Console.WriteLine(content);
}
}
}

3. Directory Operations


using System;
using System.IO;

class Program
{
static void Main()
{
string folder = "TestDir";

// Create directory
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);

// Get files
string[] files = Directory.GetFiles(folder);
foreach (string file in files)
Console.WriteLine(file);

// Delete directory
// Directory.Delete(folder);
}
}

4. JSON Serialization & Deserialization

C# provides System.Text.Json for working with JSON.


using System;
using System.Text.Json;
using System.IO;

class Person
{
public string Name { get; set; }
public int Age { get; set; }
}

class Program
{
static void Main()
{
string path = "person.json";
Person person = new Person { Name = "John", Age = 25 };

// Serialization
string jsonString = JsonSerializer.Serialize(person);
File.WriteAllText(path, jsonString);

// Deserialization
string jsonFromFile = File.ReadAllText(path);
Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonFromFile);
Console.WriteLine($"{deserializedPerson.Name}, {deserializedPerson.Age}");
}
}

5. Binary Files

Binary files store data as bytes, useful for non-text data.


using System;
using System.IO;

class Program
{
static void Main()
{
string path = "data.bin";

// Writing binary data
int[] numbers = { 1, 2, 3, 4, 5 };
using (BinaryWriter bw = new BinaryWriter(File.Open(path, FileMode.Create)))
{
foreach (int num in numbers)
bw.Write(num);
}

// Reading binary data
using (BinaryReader br = new BinaryReader(File.Open(path, FileMode.Open)))
{
for (int i = 0; i < numbers.Length; i++)
Console.WriteLine(br.ReadInt32());
}
}
}

Summary of Chapter 9:

  1. Text files: File.WriteAllText, StreamWriter, StreamReader.
  2. CSV files: Use File.ReadAllLines and File.WriteAllLines.
  3. FileStream: Low-level byte access.
  4. Directory operations: Create, read, delete directories.
  5. JSON: Serialization & deserialization using System.Text.Json.
  6. Binary files: Store and read raw bytes using BinaryWriter and BinaryReader.