У просторі імен System.IO є чотири класи, призначені для роботи з фізичними файлами і структурою каталогів на диску: Directory, File, DirectoryInfo і FileInfo. З їх допомогою можна виконувати створення, видалення, переміщення файлів і каталогів, а також набуття їх властивостей.
Класи Directory і File реалізують свої функції через статичні методи. DirectoryInfo і FileInfo володіють схожими можливостями, але вони реалізуються шляхом створення об'єктів відповідних класів. Класи DirectoryInfo і FileInfo походять від абстрактного класу FilesystemInfo, який забезпечує їх базовими властивостями, описаними в таблиці 11.10.
Таблиця 11.10
Властивості класу FileSystemInfo
Властивість
| Опис
|
Attributes
| Отримати або встановити атрибути для даного об'єкту файлової системи. Для цієї властивості використовуються значення перелічення FileAttributes
|
CreationTime
| Отримати або встановити час створення об’єкту файлової системи
|
Exists
| Визначити, чи існує даний об'єкт файлової системи
|
Extension
| Отримати розширення файлу
|
FullName
| Повернути ім'я файлу або каталога з вказівкою повного шляху
|
LastAccessTime
| Отримати або встановити час останнього звернення до об'єкту файлової системи
|
LastWriteTime
| Отримати або встановити час останнього внесення змін в об'єкт файлової системи
|
Name
| Повернути ім'я файлу. Ця властивість доступна тільки для читання. Для каталогів повертає ім'я останнього каталога в ієрархії.
|
Клас DirectoryInfo містить елементи, що дозволяють виконувати необхідні дії з каталогами файлової системи. Ці елементи перераховані в таблиці 11.11
Таблиця 11.11
Елементи класу DirectoryInfo
Елемент
| Опис
|
Create,
CreateSubDirectory
| Створити каталог або підкаталог по вказаному шляху у файловій системі
|
Delete
| Видалити каталог зі всім його вмістом
|
GetDirectories
| Повернути масив рядків, що представляють всі підкаталоги
|
GetFiles
| Отримати файли в поточному каталозі у вигляді масиву об'єктів класу FileInfo
|
MoveTo
| Перемістити каталог і весь його вміст на нову адресу у файловій системі
|
Parent
| Повернути батьківський каталог
|
У лістингу 11.9 приведений приклад, в якому створюються два каталоги, виводиться інформація про них і робиться спроба видалення каталога.
Лістинг 11.9. Використання класу DirectorInfo
using System;
using System.IO;
namespace examp83
{ class Class1
{ static void DirInfo( DirectoryInfo di)
{
// Виведення інформації про каталог
Console.WriteLine("===== Directory Info =====" );
Console.WriteLine("Full Name: " + di.FullName );
Console.WriteLine("Name: " + di.Name );
Console.WriteLine("Parent: " + di.Parent );
Console.WriteLine("Creation: " + di.CreationTime );
Console.WriteLine("Attributes: "+ di.Attributes );
Console.WriteLine("Root: " + di.Root );
Console.WriteLine("===========================");
}
static void Main()
{
DirectoryInfo di1 = new DirectoryInfo( @"c:\MyDir" );
DirectoryInfo di2 = new DirectoryInfo( @"c:\MyDir\temp" );
try
{
// Створити каталоги
di1.Create();
di2.Create();
// Вивести інформацію про каталоги
DirInfo(di1);
DirInfo(di2);
// Спробувати видалити каталог
Console.WriteLine( " Спроба видалити {0}.", di1.Name );
di1.Delete(true);
}
catch ( Exception )
{
Console.WriteLine( " Спроба не вдалася " );
}
}
}
}
Результат роботи програми:
===== Directory Info =====
Full Name: c:\MyDir
Name: MyDir Parent:
Creation: 30.04.2006 17:14:44
Attributes: Directory
Root: c:\
=====================
===== Directory Info =====
Full Name: c:\MyDir\temp
Name: temp Parent: MyDir
Creation: 30.04.2006 17:14:44
Attributes: Directory
Root: c:\
=====================
Спроба видалити MyDir.
Спроба не вдалася
Каталог не порожній, тому спроба його видалення не вдалася. Втім, якщо використовувати перевантажений варіант методу Delete з одним параметром, задаючим режим видалення, можна видалити і непорожній каталог:
dil.Delete( true ); // видаляє непорожній каталог
Зверніть увагу на властивість Attributes. Деякі її можливі значення, задані в переліченні FileAttributes, приведені в таблиці 11.12.
Таблиця 11.12
Деякі значення перелічення FileAttributes
Значення
| Опис
|
Archive
| Використовується додатками при виконанні резервного копіювання, а в деяких випадках - при видаленні старих файлів
|
Compressed
| Файл є стислим
|
Directory
| Об'єкт файлової системи є каталогом
|
Encrypted
| Файл є зашифрованим
|
Hidden
| Файл є прихованим
|
Normal
| Файл знаходиться в звичайному стані, і для нього встановлені будь-які інші атрибути. Цей атрибут не може використовуватися з іншими атрибутами
|
Offline
| Файл, розташований на сервері, кеширований в сховищі на клієнтському комп'ютері. Можливо, що дані цього файлу вже застаріли
|
Readonly
| Файл доступний тільки для читання
|
System
| Файл є системним
|
Лістинг 11.10 демонструє використання класу FileInfo для копіювання всіх файлів з розширенням jpg з каталога d:\foto в каталог d:\temp. Метод Exists дозволяє перевірити, чи існує початковий каталог.
using System;
using System.IO;
namespace examp84
{
class Class1
{
static void Main()
{
try
{
string DestName = @"d:\fot";
DirectoryInfo dest = new DirectoryInfo(DestName);
dest.Create(); // створення цільового каталога
DirectoryInfo dir = new DirectoryInfo( @"d:\temp" );
if ( !dir.Exists ) // перевірка існування каталога
{
Console.WriteLine("Каталог " +
dir.Name + " не існує" );
return;
}
FileInfo[] files = dir.GetFiles( "*.jpg" ); // список файлів
foreach (FileInfo f in files)
f.CopyTo( dest + "1.txt" ); // копіювання файлів
Console.WriteLine( "Скопійовано " +
files.Length + " jpg-файлов" );
Console.ReadLine();
}
catch (Exception e )
{
Console.WriteLine( "Error: " + e.Message );
Console.ReadLine();
}
}
}
}
Використання класів Fi1e і Directory аналогічно, за винятком того, що їх методи є статичними і, отже, не вимагають створення об'єктів.