Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие NET.doc
Скачиваний:
26
Добавлен:
07.03.2016
Размер:
4.63 Mб
Скачать

11.5. Консольне уведення-виведення

Консольні застосування мають обмежену область застосування, найпоширенішим з яких є навчання мові програмування. Для організації уведення і виведення використовується відомий вам клас Console, визначений в просторі імен System. У цьому класі визначено три стандартні потоки: вхідний потік Console.In класу TextReader і вихідні потоки Consolе.Out і Console.Error класу TextWriter.

За умовчанням вхідний потік пов'язаний з клавіатурою, а вихідні - з екраном. Проте можна перенаправити ці потоки на інші пристрої за допомогою методів SetIn і SetOut або засобами операційної системи (перенаправлення за допомогою операцій <, > і >>.

При обміні з консоллю можна застосовувати методи вказаних потоків, але частіше використовуються методи класу Console: Read, ReadLine, Write і WriteLine. Ці методи просто передають управління методам, що розташовуються нижче: In, Out і Error.

Використання двох вихідних потоків корисно, якщо треба розділити на нормальне виведення програми і її повідомлення про помилки. Наприклад, нормальне виведення програми можна направити у файл, а повідомлення про помилки - на консоль або у файл журналу.

11.6. Робота з каталогами і файлами

У просторі імен 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 аналогічно, за винятком того, що їх методи є статичними і, отже, не вимагають створення об'єктів.