Лекція 9. Основи роботи з файловою системою у .NET
Матеріали лекції стосуються вивчення основ роботи з файловою системою, класами DriveInfo
, DirectoryInfo
, FileInfo
, Directory
, File
,
а також StreamReader
, StreamWriter
. Матеріали містять базову інформацію про читання, створення, редагування та пошук файлів і папок,
а також контенту.
Найпростішим способом реалізації постійного зберігання інформації є файли. Також, під час роботи із файловою системою не варто забувати і про каталоги, диски. У .NET
для роботи введення-виведення інформації використовуються в основному класи з простору імен System.IO
.
У даному розділі буде показано спрощений варіант роботи з папками та файлами і не буде детально вивчатися питання використання потоків у C#.
Table of Contents
9.1. Управління файловою системою
Набір класів, що дозволяє маніпулювати елементами файлової системи зображений на рис. Рис. 9.1. Діаграма класів для управління файловою системою (Нейгел, 2011).9.1.

Рис. 9.1. Діаграма класів для управління файловою системою (Нейгел, 2011).
Коротко опишемо класи подані на діаграмі вище:
-
FileSystemInfo
— базовий клас для елементів файлової системи. -
FileInfo
– клас для роботи із файлами та їх властивостями. -
DirectoryInfo
– клас для роботи із каталогами та їх властивостями. -
File
– статичний клас для виконання операцій над файлами. -
Directory
– статичний клас для виконання операцій над каталогами. -
Path
– клас, що допомагає формувати коректні шляхи (повні імена елементів файлової системи). -
DriveInfo
– клас для отримання інформації про диски ПК.
Для початку розглянемо приклад використання класу DriveInfo
. Цей клас має ряд властивостей для отримання інформації про диск: Name
(назва), VolumeLabel
(мітка диска), DriveType
(тип диска), DriveFormat
(тип файлової системи), TotalSize
(розмір диска у байтах). Також важливим є статичний метод GetDrives()
, що повертає масив дисків поточного ПК.
Лістинг 9.1. Приклад використання класу DriveInfo
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (var drive in drives)
{
Console.WriteLine("{0}, {1}, {2}, {3:F0} Гб",
drive.Name, drive.DriveType,drive.DriveFormat,
drive.TotalSize/Math.Pow(2,30));
}
Результат виконання:
C:\, Fixed, NTFS, 300 Гб
D:\, Fixed, NTFS, 150 Гб
E:\, Fixed, NTFS, 200 Гб
K:\, CDRom, CDFS, 0 Гб
M:\, Removable, NTFS, 14 Гб
N:\, Removable, FAT32, 1 Гб
Далі розглянемо доступ до інформації про файли та папки, а також порівняємо відмінності між класами.
Класи DirectoryInfo
та Directory
мають ряд методів та властивостей, що дозволяють виконувати операції над каталогами (табл. 9.1.).
Код класу DirectoryInfo |
Код класу Directory |
|
---|---|---|
створення об’єкта | ||
|
не створюється (статичний клас) | |
створення каталогу | ||
|
|
|
видалення об’єкта | ||
|
|
|
перевірка на існування | ||
|
|
|
список внутрішніх каталогів | ||
|
|
|
список внутрішніх файлів | ||
|
|
Варто також звернути увагу на те, що шляхи до файлів повинні формуватися правильно. Тому потрібно використовувати спеціальні способи і пам’ятати про правила запису рядків у C#. Зокрема, варто використовувати verbatim-string
(@
) та escape
-послідовності ("\").
Ще одним способом формування рядків для роботи із файловою системою є клас Path
(лістинг 9.2).
Лістинг 9.2. Приклад використання класу Path
var dir = new DirectoryInfo(@"c:\folder\");
Console.WriteLine(Path.Combine(dir.FullName, "win"));
Console.WriteLine(Path.GetPathRoot(dir.FullName));
Результат виконання:
c:\folder\win
c:\
Список використаних джерел
Задачі
Задача 9.1. Написати програму аналог провідника Windows із можливістю переходу по каталогах та перегляду файлів. Додати у список (ListView) та дерево (TreeView) іконки для візуального розрізнення директорій та файлів.

Задача 9.2. Написати програму для пошуку файлів за вказаною маскою на ПК. Додати також можливість обрати область для пошуку:
- весь ПК
- обраний диск
- обрана директорія