JavaRush /Курси /C# SELF /Поняття файлу, файлової системи та шляху

Поняття файлу, файлової системи та шляху

C# SELF
Рівень 35 , Лекція 0
Відкрита

1. Вступ

Файл — це просто блок даних, який фізично зберігається на якомусь накопичувачі: жорсткому диску, SSD, флешці, ба навіть на дискеті (передайте привіт своєму дідусеві!). Для користувача файл — це щось, що можна відкрити, прочитати, змінити й зберегти.

У програмуванні файл — це послідовність байтів із певним імʼям і розташуванням, а для вас, як для програміста, — обʼєкт, у якого є імʼя, шлях до нього (наче адреса), розмір, дата створення тощо. Найголовніше: файл — це персистентне (стійке) сховище даних. Усе, що сталося в памʼяті під час виконання програми, зазвичай зникає після її завершення, а файл — лишається.

Що таке файлова система?

Файлова система — це спосіб зберігання й організації файлів на диску. Вона відповідає на запитання: де й як шукати файл, хто має до нього доступ, як саме влаштовані папки (каталоги), як знаходити імʼя файлу та його вміст.

Уявіть собі велику шафу, у якій багато шухляд. У кожній шухляді можуть бути папки, а в кожній папці — документи (файли). Щоб знайти свій конспект з C#, вам потрібно відкрити шафу, знайти потрібну шухляду, дістати папку і в ній — потрібний аркуш. Так файлова система організовує інформацію.

Популярні файлові системи

  • NTFS — «рідна» файлова система Windows.
  • FAT32, exFAT — для флешок, SD-карт, зовнішніх накопичувачів.
  • EXT4 — популярна в Linux.
  • APFS, HFS+ — macOS.

Для C#‑розробника це зазвичай несуттєво: .NET приховує деталі реалізації, а ви працюєте з абстракцією «файл/папка». Проте інколи ці знання стають у пригоді. Наприклад, у NTFS дозволено в імені файлу використовувати пробіли та багато спеціальних символів, а в FAT32 — ні.

2. Як влаштовані каталоги (папки)

Каталог (або папка) — це спеціальний тип файлу, що містить списки інших файлів і/або каталогів. Дерево каталогів (файлова ієрархія) — це той самий знайомий шлях від кореня до файлу: наприклад, C:\Users\Іван\Documents\MyFile.txt.

  • Корінь — це початок диска (C:\).
  • Усередині — папки (підпапки), у яких розміщено файли або інші папки.

Ось проста візуалізація:


C:\
 └── Users\
     └── Іван\
         ├── Documents\
         │    └── MyFile.txt
         └── Pictures\
              └── Cat.jpg

3. Що таке шлях до файлу (file path)?

Шлях до файлу — це «адреса» файлу в дереві каталогів. За його допомогою можна однозначно знайти потрібний файл або папку.

Абсолютний і відносний шлях

  • Абсолютний шлях: починається з кореня файлової системи.
    Windows: C:\Users\Іван\Documents\MyFile.txt
    Linux/macOS: /home/ivan/Documents/MyFile.txt
  • Відносний шлях: починається з поточного розташування (поточного каталогу).
    Наприклад, якщо ваша програма запущена з папки C:\Users\Іван, то відносний шлях Documents\MyFile.txt вкаже на той самий файл.

Поточний каталог — це особливе поняття: це «точка відліку» для всіх відносних шляхів. Під час запуску програми зазвичай це папка, де міститься .exe‑файл, або та, звідки ви відкрили консоль.

Схема: Абсолютний і відносний шлях


Абсолютний шлях                                Відносний шлях

C:\Projects\MyApp\logs\output.txt              logs\output.txt
└─ Корінь диску (C:)                           └─ Відносно запущеної MyApp

Роздільники у шляхах: \ і /

У Windows використовується зворотний слеш (\), а в Linux/macOS — зазвичай прямий (/).

Сучасний .NET підтримує обидва варіанти, але намагайтеся не змішувати їх в одному проєкті. Для побудови шляху завжди використовуйте спеціальне API (програмний інтерфейс застосунку), а не зʼєднуйте рядки вручну.

4. Як програма бачить файл

У .NET для роботи з файлами є широкий набір інструментів. Основні з них:

  • System.IO.File: статичні методи для швидкого читання, запису, видалення, перевірки наявності файлів тощо.
  • System.IO.Directory: аналогічні методи для роботи з папками.
  • System.IO.FileInfo і System.IO.DirectoryInfo: обʼєктні обгортки з доступом до метаданих файлу/папки.
  • System.IO.Path: клас‑помічник для роботи зі шляхами (зʼєднання шляхів, виділення розширення, імені тощо).

Трохи прикладів

Перевірка наявності файлу


using System.IO;

if (File.Exists("data.txt"))
{
    Console.WriteLine("Файл знайдено!");
}
else
{
    Console.WriteLine("Файл не знайдено!");
}

Отримання розміру файлу


var info = new FileInfo("data.txt");
Console.WriteLine($"Розмір файлу: {info.Length} байтів");

Роботу всіх прикладів ми розбиратимемо на найближчих лекціях. Зараз — просто подивіться і отримайте задоволення :)

5. Корисні нюанси

Метадані файлу: імʼя, розширення, розмір, дати тощо

Коли ви працюєте з файлом, важить не лише його вміст — є ще «паспорт файлу»:

  • Імʼя — те, як файл називається для людини.
  • Розширення.txt, .jpg, .exe, .cs тощо: допомагає (інколи!) зрозуміти, що всередині.
  • Розмір — кількість байтів.
  • Час створення/зміни — можна дізнатися, коли файл зʼявився або востаннє змінювався.
  • Атрибути — наприклад: файл лише для читання, прихований, системний.

У .NET для цього зручно використовувати класи FileInfo, DirectoryInfo (про це — в одній із наступних лекцій).

Розширення файлу та формати

Розширення файлу — це просто частина імені, що йде після крапки. Наприклад, у document.txt розширення txt. Операційна система використовує розширення, щоб зрозуміти, чим «відкривати» файл (наприклад, .jpg — програма для роботи із зображеннями, .xls — Excel тощо).

Але для вас, як для розробника, розширення — лише підказка. Реальний формат файлу визначається тільки його вмістом. Можна, наприклад, відкрити файл MyCat.jpg як текстовий — і побачити купу «абракадабри» (незрозумілі символи, але точно не зображення). Тож памʼятайте: розширення — не гарантія, а лише умовність.

Як влаштоване читання й запис файлу: базові поняття

Файл — це послідовність байтів. Робота з файлом у C# зазвичай передбачає:

  • Відкриття файлу для читання або запису (або і того, й іншого).
  • Читання даних у памʼять.
  • Запис нових даних на диск.
  • Закриття файлу — це дуже важливо, інакше ви заблокуєте системний ресурс (а хтось не зможе цей файл видалити, доки ви тримаєте його відкритим).

Сучасні API в .NET дбають про вас: наприклад, клас File уміє відкрити файл, прочитати й одразу закрити його. Але під час роботи з потоками (Stream) і великими файлами до цього варто ставитися серйозно (про це поговоримо на наступних лекціях).

Що важливо знати про кросплатформність

Майже весь сучасний C# працює під Windows, Linux і macOS практично однаково. Утім, є нюанси. Найпоширеніший — це різниця в роздільниках (\ vs /), а також обмеження на довжину імені файлу й заборонені символи.

Ось чому API типу Path.Combine і методи з System.IO.Path — ваші найкращі помічники. Вони «складуть» шлях правильно на будь-якій ОС. Ніколи не пишіть так:


var filePath = "C:\\Users\\Ivan\\data.txt"; // Лише для Windows!

Краще:


var filePath = Path.Combine("Users", "Ivan", "data.txt");

Як дізнатися поточний робочий каталог?

Іноді важливо зрозуміти, де саме будуть збережені ваші файли. Для цього є спеціальний клас:


string currentDir = Environment.CurrentDirectory;
Console.WriteLine($"Поточний каталог: {currentDir}");

До речі, якщо дати користувачеві можливість обирати шлях, використовуйте діалоги вибору файла/каталогу або аргументи командного рядка.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ