Лекція 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.).

Таблиця 9.1. Функції та можливості класів DirectoryInfo та Directory

Код класу DirectoryInfo   Код класу Directory
створення об’єкта
var dir = new DirectoryInfo(@"c:\windows");
не створюється (статичний клас)
створення каталогу
dir.Create()
Directory.CreateDirectory("p")
видалення об’єкта
dir.Delete()	
Directory.Delete("path")
перевірка на існування
dir.Exists	
Directory.Exists("path")
список внутрішніх каталогів
dir.GetDirectories()	
Directory.GetDirectories("p")
список внутрішніх файлів
dir.GetFiles()	
Directory.GetFiles("path")

Варто також звернути увагу на те, що шляхи до файлів повинні формуватися правильно. Тому потрібно використовувати спеціальні способи і пам’ятати про правила запису рядків у 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. Написати програму для пошуку файлів за вказаною маскою на ПК. Додати також можливість обрати область для пошуку:

  • весь ПК
  • обраний диск
  • обрана директорія

Додаткові матеріали для завнатаження


Дорогі друзі, якщо Ви помітили, що для написання матеріалів використані джерела, які я не вказав - прошу надіслати мені інформацію на пошту. Дякую.