Работа с файловой системой в C#: полное руководство для новичков

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с файловой системой в 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. Практикуйтесь, создавая небольшие утилиты для работы с файлами — это лучший способ закрепить материал.

Блоги

Рекомендаций по книгам