Персональна
сторінка Клебана Юрія

Сайт у процесі наповнення.

Курс "Основи програмування на платформі .NET"

13. Робота з файловою системою. Читання та запис файлів.


ПЛАН

13.1. Управління файловою системою.

13.2. Використання діалогів для доступ до файлів та папок.

ПРИКЛАДИ РОЗВ’ЯЗАННЯ ЗАДАЧ.

ЗАДАЧІ ДЛЯ САМОСТІЙНОЇ ПІДГОТОВКИ


Найпростішим способом реалізації постійного зберігання інформації є файли. Також, під час роботи із файловою системою не варто забувати і про каталоги, диски. У .NET для роботи введення-виведення інформації використовуються в основному класи з простору імен System.IO.

У даному розділі буде показано спрощений варіант роботи з папками та файлами і не буде детально вивчатися питання використання потоків у C#.

13.1. Управління файловою системою.

Набір класів, що дозволяє маніпулювати елементами файлової системи зображений на рис. 13.1.

Рис. 13.1. Діаграма класів для управління файловою системою.

Коротко опишемо класи подані на діаграмі вище:

Для початку розглянемо приклад використання класу DriveInfo. Цей клас має ряд властивостей для отримання інформації про диск: Name (назва), VolumeLabel (мітка диска), DriveType (тип диска), DriveFormat (тип файлової системи), TotalSize (розмір диска у байтах). Також важливим є статичний метод GetDrives(), що повертає масив дисків поточного ПК. 

Лістинг 13.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 мають ряд методів та властивостей, що дозволяють виконувати операції над каталогами (табл. 13.1.).

Таблиця 13.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()
список внутрішніх файлів
dir.GetFiles() Directory.GetFiles("path")

Варто також звернути увагу на те, що шляхи до файлів повинні формуватися правильно. Тому потрібно використовувати спеціальні способи і пам’ятати про правила запису рядків у C#. Зокрема, варто використовувати verbatim-string (@) та escape-послідовності (“\\”).

Ще одним способом формування рядків для роботи із файловою системою є клас Path (лістинг 13.2). 

Лістинг 13.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:\

Розглянемо приклад створення каталогів, а також читання інформації про файли та папки (лістинг 13.3).

Лістинг 12.3. Приклад роботи з класом DirectoryInfo.

var dir = new DirectoryInfo(@"d:\folder\");
dir.Create();
dir.CreateSubdirectory("aaa");
dir.CreateSubdirectory("bbb");
foreach (var d in dir.GetDirectories())
   Console.WriteLine(d.FullName);

Результат виконання програми та ієрархію створених каталогів зображено на рис. 13.2.