Работа з файлової системою: класи Directory і Filе і класи DirectoryInfo і FileInfo
Робота з файловою системою
У просторі імен System.IO передбачено чотири класи, які призначені для роботи з файловою системою комп'ютера, тобто для створення, видалення перенесення і т.д. файлів і каталогів.
Перші два типи - Directory і Fi1е реалізують свої можливості за допомогою статичних методів, тому дані класи можна використовувати без створення відповідних об'єктів (екземплярів класів).
Наступні типи - DirectoryInfo і FileInfo мають схожі функціональними можливостями c Directory і Fi1е , але породжені від класу FileSystemInfo і тому реалізуються шляхом створення відповідних примірників класів.
Зауваження . Перед вивченням даної лекції скопіюйте на диск d свого комп'ютера архів prim . Уважно вивчіть вміст даного архіву.
Робота з каталогами
Абстрактний клас FileSystemInfo
Значна частина членів FileSystemInfo призначена для роботи з загальними характеристиками файлу або каталогу (мітками часу, атрибутами і т. П.). Розглянемо деякі властивості FileSystemInfo :
властивість | опис |
---|---|
Attributes | Дозволяє отримати або встановити атрибути для даного об'єкта файлової системи. Для цього властивості використовуються значення і перерахування FileAttributes |
CreationTime | Дозволяє отримати або встановити час створення об'єкта файлової системи |
Exists | Може бути використано для того, щоб визначити, чи існує даний об'єкт файлової системи |
Extension | Дозволяє отримати розширення для файлу |
FullName | Повертає ім'я файлу або каталогу з зазначенням шляху до нього в файлової системі |
LastAccessTime | Дозволяє отримати або встановити час останнього звернення до об'єкта файлової системи |
LastWriteTime | Дозволяє отримати або встановити час останнього внесення змін до об'єкта файлової системи |
Name | Повертає ім'я зазначеного файлу. Це властивість доступно тільки для читання. Для каталогів повертає ім'я останнього каталогу в ієрархії, якщо це можливо. Якщо немає, повертає повністю певне ім'я |
У FileSystemInfo передбачено і кілька методів. Наприклад, метод Delete () - дозволяє видалити об'єкт файлової системи з жорсткого диска, a Refresh () - оновити інформацію про об'єкт файлової системи.
клас DirectoryInfo
Даний клас успадковує члени класу FileSystemInfo і містить додатковий набір членів, які призначені для створення, переміщення, видалення, отримання інформації про каталогах і підкаталогах в файлової системі. Найбільш важливі члени класу містяться в наступній таблиці:
Робота з типом DirectoryInfo починається з того, що ми створюємо екземпляр класу (об'єкт), вказуючи при виклику конструктора в якості параметра шлях до потрібного каталогу. Якщо ми хочемо звернутися до поточного каталогу (тобто каталогу, в якому в даний час проводиться виконання програми), замість параметра використовується позначення "." . наприклад:
// Створюємо об'єкт DirectoryInfo, якому буде звертатися до поточного каталогу DirectoryInfo dir1 = new DirectoryInfo ( "."); // Створюємо об'єкт DirectoryInfo, якому буде звертатися до каталогу d: \ prim DirectoryInfo dir2 = new DirectoryInfo (@ "d: \ prim");
Якщо ми спробуємо створити об'єкт DirectoryInfo , зв'язавши його з неіснуючим каталогом, то буде згенеровано виняток System.IO.DirectoryNotFoundException . Якщо ж все нормально, то ми зможемо отримати доступ до даного каталогу. У прикладі, який наведений нижче, ми створюємо об'єкт DlrectoryInfo , який пов'язаний з каталогом d: \ prim , і виводимо інформацію про даний каталозі:
using System; using System.Text; using System.IO; namespace MyProgram { class Program { static void Main (string [] args) { DirectoryInfo dir = new DirectoryInfo (@ "d: \ prim"); Console.WriteLine ( "*****" + dir.Name + "*****"); Console.WriteLine ( "FullName: {0}", dir.FullName); Console.WriteLine ( "Name: {0}", dir.Name); Console.WriteLine ( "Parent: {0}", dir.Parent); Console.WriteLine ( "Creation: {0}", dir.CreationTime); Console.WriteLine ( "Attributes: {0}", dir.Attributes.ToString ()); Console.WriteLine ( "Root: {0}", dir.Root); } } }
Властивість Attributes дозволяє отримати інформацію про атрибути об'єкта файлової системи. Можливі значення даного властивості приведені в наступній таблиці:
значення | опис |
---|---|
Archive | Цей атрибут використовується додатками при проведенні резервного копіювання, а в деяких випадках - видалення старих файлів |
Compressed | Визначає, що файл є стислим |
Directory | Визначає, що об'єкт файлової системи є каталогом |
Encrypted | Визначає, що файл є зашифрованим |
Hidden | Визначає, що файл є прихованим (такий файл не буде виводитися при звичайному перегляді каталогу) |
Normal | Визначає, що файл знаходиться в звичайному стані і для нього встановлені будь-які інші атрибути. Цей атрибут не може використовуватися з іншими атрибутами |
Offline | Файл (розташований на сервері) кешуватися в сховище off-line на клієнтському комп'ютері. Можливо, що дані цього файлу вже застаріли |
Readonly | Файл доступний тільки для читання |
System | Файл є системним (тобто файл є частиною операційної системи або використовується виключно операційною системою) |
Через DirectoryInfo можна не тільки отримувати доступ до інформації про поточний каталозі, але отримати доступ до інформації про його підкаталогах:
class Program { static void printDirect (DirectoryInfo dir) { Console.WriteLine ( "*****" + dir.Name + "*****"); Console.WriteLine ( "FullName: {0}", dir.FullName); Console.WriteLine ( "Name: {0}", dir.Name); Console.WriteLine ( "Parent: {0}", dir.Parent); Console.WriteLine ( "Creation: {0}", dir.CreationTime); Console.WriteLine ( "Attributes: {0}", dir.Attributes.ToString ()); Console.WriteLine ( "Root: {0}", dir.Root); } static void Main (string [] args) { DirectoryInfo dir = new DirectoryInfo (@ "d: \ prim"); printDirect (dir); DirectoryInfo [] subDirects = dir.GetDirectories (); Console.WriteLine ( "Знайдено {0} підкаталогів", subDirects.Length); foreach (DirectoryInfo d in subDirects) { printDirect (d); } } }
Завдання . Перетворіть метод printDirect врекурсивний метод таким чином, щоб можна було переглянути інформацію про всіх підкаталогах поточного каталогу, незалежно від рівня вкладеності.
Метод CreateSubdirectory () дозволяє створити в обраному каталозі як єдиний підкаталог, так і безліч підкаталогів (в тому числі, і вкладених один в одного). Створимо в каталозі кілька додаткових підкаталогів:
DirectoryInfo dir = new DirectoryInfo (@ "d: \ prim"); dir.CreateSubdirectory ( "doc"); // створили підкаталог dir.CreateSubdirectory (@ "book \ 2008"); // створили вкладений підкаталог
Завдання . Створіть вкладений підкаталог best \ 2008 рік для каталогу d: \ prim \ bmp .
Метод MoveTo () дозволяє перемістити поточний каталог по заданому в якості параметра адресою. При цьому можливо зробити перейменування каталогу. наприклад:
DirectoryInfo dir = new DirectoryInfo (@ "d: \ prim \ bmp"); dir.MoveTo (@ "d: \ prim \ letter \ bmp");
В даному випадку каталог bmp переміщається в за адресою d: \ prim \ letter \ bmp . Так як ім'я переміщуваного каталогу збігається з крайнім правим ім'ям в адресі нового місця розташування каталогу, то перейменування не відбувається. Наступний приклад дозволить нам перейменувати поточний каталог:
DirectoryInfo dir = new DirectoryInfo (@ "d: \ prim \ letter"); dir.MoveTo (@ "d: \ prim \ archive");
клас Directory
Працювати з каталогами файлової системи комп'ютера можна і за допомогою класу Directory , функціональні можливості якого багато в чому збігаються з можливостями DirectoryInfo . Але члени даного класу реалізовані статично, тому для їх використання немає необхідності створювати об'єкт.
Розглянемо роботу з методами даного класу на прикладах.
Зауваження . Видаліть з диска d змінену папку prim . І ще раз скопіюйте її вихідну версію з розділу 12 цього електронного підручника.
Directory.CreateDirectory (@ "d: \ prim \ 2008"); // створили підкаталог 2008 Directory.Move (@ "d: \ prim \ bmp", @ "D: \ prim \ 2008 рік \ bmp"); // перенесли каталог bmp в каталог 2008 Directory.Move (@ "d: \ prim \ letter", @ "D: \ prim \ archives"); // перейменували каталог letter в archives
Зауваження .
- Видалення каталогу можливо тільки тоді, коли він порожній.
- На практиці комбінують використання класів Directory і DirectoryInfo .
Комментариев нет:
Отправить комментарий