Підрозділ 18.1
Класи Path, File та Directory
18.1. Класи Path, File та Directory Файлова система — один із найважливіших механізмів збереження даних у будь якому застосунку. Медична інформаційна система зберігає картки пацієнтів, результати аналізів, знім
18.1. Класи Path, File та Directory
Файлова система — один із найважливіших механізмів збереження даних у будь-якому застосунку. Медична інформаційна система зберігає картки пацієнтів, результати аналізів, знімки, архіви журналів — усе це файли та теки на диску. C# надає потужний і зручний інструментарій для роботи з файловою системою через простір імен System.IO. Три основні статичні класи — Path, File та Directory — покривають переважну більшість сценаріїв: від складання шляхів і перевірки існування ресурсів до читання, запису та переміщення файлів.
Клас Path — маніпуляції з рядками шляхів
Path — статичний клас, що надає методи для роботи з рядковим поданням шляхів файлової системи. Важлива особливість: Path не звертається до диску взагалі — він виключно обробляє рядки. Це робить його операції миттєвими і безпечними щодо винятків файлової системи.
Метод Path.Combine дозволяє об'єднувати частини шляху незалежно від операційної системи. Використання рядкової конкатенації (dir + "\\" + file) — поширена помилка: вона ламається на Linux/macOS, де роздільник — /. Path.Combine завжди підставляє правильний роздільник:
Path.GetFullPath перетворює відносний шлях на абсолютний — корисно при роботі з конфігурацією:

Клас Directory — робота з теками
Directory — статичний клас для операцій над директоріями файлової системи: перевірки існування, створення, видалення, перебирання вмісту.
Перевірка існування та створення
Directory.CreateDirectory безпечно ігнорує виклик, якщо тека вже існує — не кидає виняток при повторному створенні. Це дозволяє гарантувати існування потрібної структури теок перед записом файлів.
Перебирання вмісту теки
GetFiles vs EnumerateFiles
GetFiles повертає весь масив одразу — усі шляхи зчитуються у пам'ять перед поверненням. EnumerateFiles повертає IEnumerable<string> з ліниво обчисленим результатом — елементи надходять по одному в міру обходу. Для великих теок з тисячами файлів EnumerateFiles ефективніший — перший файл доступний без очікування завершення всього обходу:
Переміщення та видалення теки
Без параметра recursive: true виклик Delete на непорожній теці кине IOException.
Клас File — робота з файлами
File — статичний клас для атомарних операцій над файлами. «Атомарних» означає: кожен метод сам відкриває файл, виконує операцію і закриває. Це зручно для простих сценаріїв, де не потрібен потоковий доступ.
Запис та читання тексту
Дозапис у кінець файлу
Перевірка існування, копіювання, переміщення, видалення
Читання/запис масиву байтів
Для бінарних даних File.ReadAllBytes і File.WriteAllBytes зчитують та записують весь файл як byte[]:
Path, File та Directory разом: реальний сценарій
Об'єднаємо всі три класи у типовому сценарії медичної системи — організація архіву результатів аналізів:
