Работа с файловой системой в C#: для начинающих
Работа с файловой системой — один из ключевых навыков любого разработчика. В C# (.NET) предусмотрены мощные инструменты для создания, чтения, записи и удаления файлов и директорий. В этой статье мы разберём базовые операции с файловой системой, которые пригодятся как новичкам, так и опытным программистам. Все примеры написаны на C# и используют пространство имён System.IO.
Основы работы с пространством имён System.IO
Пространство имён System.IO содержит все основные классы для взаимодействия с файловой системой. Чтобы начать работу, добавьте в начало вашего файла следующую директиву:
using System.IO;
using System; // для Console и других базовых операций
Основные классы, которые мы будем использовать:
File— статические методы для работы с файлами (создание, копирование, удаление).FileInfo— экземплярный класс для получения информации о конкретном файле.Directory— статические методы для работы с папками.DirectoryInfo— экземплярный класс для информации о директории.Path— утилиты для работы с путями.
Давайте рассмотрим каждый аспект на практике.
Создание и запись в файл
Самый простой способ создать файл и записать в него текст — использовать метод File.WriteAllText. Он создаёт файл (или перезаписывает существующий) и записывает строку.
string path = @"C:\Temp\example.txt";
string content = "Привет, мир! Это тестовый файл.";
File.WriteAllText(path, content);
Console.WriteLine("Файл создан и записан.");
Если нужно записать несколько строк, используйте File.WriteAllLines:
string[] lines = { "Первая строка", "Вторая строка", "Третья строка" };
File.WriteAllLines(path, lines);
Для добавления данных в конец существующего файла используйте File.AppendAllText:
File.AppendAllText(path, "\nДобавленная строка.");
Чтение данных из файла
Чтение файла также интуитивно понятно. Метод File.ReadAllText возвращает всё содержимое как одну строку:
string readContent = File.ReadAllText(path);
Console.WriteLine("Содержимое файла:");
Console.WriteLine(readContent);
Если файл состоит из строк, удобнее использовать File.ReadAllLines, который возвращает массив строк:
string[] readLines = File.ReadAllLines(path);
foreach (string line in readLines)
{
Console.WriteLine(line);
}
Для больших файлов лучше применять потоковое чтение с помощью StreamReader, чтобы не загружать весь файл в память:
using (StreamReader reader = new StreamReader(path))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
Работа с папками (директориями)
Создание, проверка существования и удаление папок — частые задачи. Вот как это делается с помощью класса Directory:
string dirPath = @"C:\Temp\MyFolder";
// Проверка существования
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
Console.WriteLine("Папка создана.");
}
else
{
Console.WriteLine("Папка уже существует.");
}
// Удаление папки (если она пуста)
if (Directory.Exists(dirPath))
{
Directory.Delete(dirPath);
Console.WriteLine("Папка удалена.");
}
Чтобы получить список файлов в папке, используйте Directory.GetFiles:
string[] files = Directory.GetFiles(@"C:\Temp");
foreach (string file in files)
{
Console.WriteLine(file);
}
Аналогично для подпапок — Directory.GetDirectories.
Проверка существования и удаление файлов
Перед удалением или изменением файла всегда проверяйте его существование:
string filePath = @"C:\Temp\example.txt";
if (File.Exists(filePath))
{
File.Delete(filePath);
Console.WriteLine("Файл удалён.");
}
else
{
Console.WriteLine("Файл не найден.");
}
Также можно получить свойства файла с помощью FileInfo:
FileInfo fileInfo = new FileInfo(filePath);
if (fileInfo.Exists)
{
Console.WriteLine($"Размер: {fileInfo.Length} байт");
Console.WriteLine($"Дата создания: {fileInfo.CreationTime}");
Console.WriteLine($"Дата последнего изменения: {fileInfo.LastWriteTime}");
}
Обработка исключений при работе с файловой системой
Операции с файлами часто вызывают исключения: файл может быть занят, путь может быть неверным, недостаточно прав. Всегда оборачивайте код в блок try-catch:
try
{
string content = File.ReadAllText(@"C:\Temp\nonexistent.txt");
Console.WriteLine(content);
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"Ошибка: файл не найден — {ex.Message}");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine($"Ошибка: нет доступа — {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Общая ошибка: {ex.Message}");
}
Наиболее частые исключения:
FileNotFoundException— файл не существует.DirectoryNotFoundException— указанная папка не найдена.UnauthorizedAccessException— недостаточно прав для чтения/записи.IOException— общая ошибка ввода-вывода (например, файл занят другим процессом).
Заключение
Мы рассмотрели основные операции с файловой системой в C#: создание, чтение, запись файлов, работу с папками, проверку существования и удаление. Эти навыки являются базовыми для любого .NET-разработчика. Помните про обработку исключений и используйте потоковое чтение для больших файлов.
Для углублённого изучения рекомендуем ознакомиться с классами FileStream, BinaryReader/BinaryWriter и MemoryStream. Практикуйтесь, создавая небольшие утилиты для работы с файлами — это лучший способ закрепить материал.