OOP Course
Сьогодні

Підрозділ 18.2

Класи FileInfo та DirectoryInfo

18.2. Класи FileInfo та DirectoryInfo У розділі 18.1 ми розглянули статичні класи Path , File та Directory , кожен з яких виконує операцію атомарно: відкрив → зробив → закрив. Це зручно для разових дій, але нее

18.2. Класи FileInfo та DirectoryInfo

У розділі 18.1 ми розглянули статичні класи Path, File та Directory, кожен з яких виконує операцію атомарно: відкрив → зробив → закрив. Це зручно для разових дій, але неефективно, коли потрібно виконати кілька операцій над одним і тим самим ресурсом. Саме для таких сценаріїв C# надає об'єктні аналоги — класи FileInfo та DirectoryInfo.

На відміну від статичних класів, FileInfo і DirectoryInfo — екземплярні класи: ви створюєте об'єкт, що представляє конкретний файл або директорію, і далі вся робота відбувається через цей об'єкт. Ключова перевага — кешування метаданих: при першому зверненні до властивості (Exists, Length, LastWriteTime тощо) об'єкт один раз запитує у файлової системи всі метадані файлу і зберігає їх у собі, тож подальші звернення до властивостей диска не торкаються. (У старих джерелах можна зустріти твердження, що FileInfo ще й «один раз перевіряє права доступу» — це стосувалося перевірок безпеки коду CAS у .NET Framework; у .NET Core і .NET 5+ таких перевірок немає, а права доступу перевіряє операційна система при кожному відкритті файлу незалежно від того, чи використано File, чи FileInfo.) Зворотний бік кешування — дані можуть застаріти, якщо файл змінив інший код; про це — метод Refresh() нижче.

Статичні vs екземплярні класи файлової системиСтатичні vs екземплярні класи файлової системи

Клас FileInfo — об'єктне представлення файлу

FileInfo надає той самий набір операцій, що і статичний File, але через інтерфейс об'єкта: метадані файлу зберігаються у властивостях, а операції викликаються як методи екземпляра.

Створення об'єкта та властивості

Методи FileInfo — операції над файлом

fi.MoveTo(...) оновлює внутрішній стан об'єкта — після виклику fi.FullName і fi.Name відображають нове розташування файлу. Це суттєва відмінність від статичного File.Move, після якого ви маєте будувати новий шлях вручну.

Відкриття потоків через FileInfo

FileInfo надає методи для відкриття різних видів потоків — це зручно, коли потрібен потоковий доступ замість атомарного читання/запису:

fi.Refresh() — важливий метод: FileInfo кешує метадані (розмір, час змін) при першому зверненні. Якщо файл змінився після створення об'єкта, кешовані дані застаріють. Виклик Refresh() примусово перечитує метадані з диску.

Клас DirectoryInfo — об'єктне представлення директорії

DirectoryInfo — об'єктний аналог статичного Directory. Представляє конкретну директорію і надає методи для роботи з нею та її вмістом через інтерфейс об'єкта.

Властивості та методи

Ключова відмінність DirectoryInfo.GetFiles() від Directory.GetFiles(): перший повертає FileInfo[] — повноцінні об'єкти з метаданими (розмір, час, атрибути). Другий повертає лише string[] — масив рядків-шляхів. Якщо вам потрібні метадані файлів після переліку, DirectoryInfo економить один додатковий виклик на кожен файл.

Створення ієрархії та навігація

CreateSubdirectory — метод, що повертає DirectoryInfo для щойно створеної підтеки. Це дозволяє будувати ієрархії тек у fluent-стилі, не будуючи шляхи вручну. Властивість Parent забезпечує навігацію вгору, Root — одразу до кореня.

FileSystemInfo — спільний базовий клас

FileInfo і DirectoryInfo успадковують від абстрактного класу FileSystemInfo. Це дозволяє писати поліморфний код, що працює як з файлами, так і з директоріями:

FileSystemInfo містить спільні властивості: Name, FullName, Exists, CreationTime, LastWriteTime, LastAccessTime, Attributes. Метод GetFileSystemInfos() повертає суміш FileInfo і DirectoryInfo об'єктів для всіх записів у теці.

FileInfo vs File — порівняння підходів

Правило вибору:

  • File / Directory — одна операція, результат не потрібен відразу, метадані не важливі
  • FileInfo / DirectoryInfo — кілька операцій над тим самим ресурсом, або потрібні метадані файлу (розмір, час, атрибути)

Практичний сценарій: аналіз архіву медичних записів

Об'єднаємо можливості FileInfo та DirectoryInfo у реальному сценарії — побудова зведеного звіту по архіву медичних записів:

Властивості FileInfo та структура ієрархіїВластивості FileInfo та структура ієрархії

Розроблено Tomka Yurii · © 2026 ·