Skip to content

mor1la/FileSystem

Repository files navigation

Домашнее задание: RAII-библиотека для работы с файловой системой

Задание

Реализовать собственную библиотеку для работы с файловой системой с использованием парадигмы RAII.

Требования:

  1. Создавать объект, который берёт на себя управление файлом (открывает его при создании).
  2. Закрывать файл по завершении жизненного цикла объекта.
  3. Реализовать методы readLine() и writeLine().
  4. В случае ошибок выбрасывать exception.
  5. Создать демонстрационную программу, показывающую:
    • чтение и запись;
    • закрытие файла по RAII;
    • обработку ошибок.

Реализованный класс

Был реализован класс FileHandler, отвечающий за автоматическое управление ресурсами файла. Ниже приведён список его методов и полей:

Методы:

  • FileHandler(const std::filesystem::path& filePath, Mode mode) — конструктор, открывающий файл в заданном режиме.
  • void writeLine(const std::string& line) — записывает строку в файл.
  • std::string readLine() — считывает одну строку из файла.
  • void checkFileIsOpen() — проверяет, открыт ли файл (вспомогательный метод).
  • void checkMode(Mode expected) const — проверяет, соответствует ли текущий режим ожиданиям (вспомогательный метод).

Перечисление:

  • enum class Mode { Read, Write, ReadWrite } — определяет режим открытия файла.

Поля:

  • std::unique_ptr<std::fstream, StreamDeleter> stream — указатель на файловый поток с пользовательским делетером для безопасного закрытия.
  • std::filesystem::path filePath — путь к файлу.
  • Mode openMode — режим, в котором открыт файл.

Дополнительно:

  • Класс не копируемый, но перемещаемый, что предотвращает двойное управление файлом.
  • Исключения выбрасываются с помощью std::runtime_error при ошибках открытия, чтения/записи или неправильном режиме.

About

File System RAII Library

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published