- •Міністерство освіти і науки, молоді та спорту україни
- •Розділ 1. Основи платформи .Net
- •1.1. Основи платформи .Net
- •1.2. Загальні відомості об'єктно-орієнтованого програмування
- •1.3. Середовище Visual Studio .Net
- •1.4 Консольні додатки
- •Розділ 2. Основні поняття мови
- •2.1. Склад мови
- •2.1.1 Алфавіт і лексеми
- •2.1.2. Ідентифікатори і ключові слова
- •2.1.3. Знаки операцій і роздільники
- •2.1.4. Літерали
- •Константи в с#
- •Суфікси цілих і дійсних констант
- •Управляючі послідовності у с#
- •2.1.5. Коментарі
- •2.2. Типи даних
- •2.2.1. Класифікація типів
- •2.2.2. Типи літералів
- •2.2.3. Типи-значення і посилальні типи
- •2.2.4. Упаковка і розпаковування
- •2.3. Рекомендації по програмуванню
- •Розділ 3. Змінні, іменовані константи, операції і вирази
- •3.1. Змінні і іменовані константи
- •3.2. Операції і вирази
- •3.2.1. Перетворення вбудованих арифметичних типів-значень
- •3.2.2. Введення у виключення
- •3.2.3. Основні операції с#
- •Операнд_1 ? операнд_2 : операнд_3.
- •3.3. Лінійні програми (програмування лінійних обчислювальних процесів)
- •3.3.1. Просте введення-виведення даних
- •3.3.2. Математичні функції - клас Math
- •Розділ 4. Оператори
- •4.1. Вирази, блоки
- •4.2. Оператори розгалуження
- •4.2.1. Умовний оператор if
- •4.2.1. Умовний оператор switch
- •4.3. Оператори циклу
- •4.3.1. Цикл з передумовою while
- •4.3.2. Цикл з постумовою do
- •4.3.3. Цикл з параметром for
- •For ( ініціалізація; вираз; модифікації ) оператор;
- •4.3.4. Цикл перебору foreach
- •4.3.5. Рекомендації по вибору оператора циклу
- •4.4. Обробка виняткових ситуацій
- •4.4.1. Оператор try
- •Try блок [ блоки catch ] [ блок finally ]
- •4.4.2. Оператор throw
- •Throw [ вираз ];
- •4.4.3. Клас Exception
- •4.4.4. Оператори checked и unchecked
- •4.5. Рекомендації по програмуванню
- •Розділ 5. Класи: основні поняття
- •5.1. Привласнення і порівняння об'єктів
- •5.2. Дані: поля і константи
- •5.3. Методи
- •5.3.1. Параметри методів
- •5.3.2. Параметри-значення
- •5.3.3. Параметри-посилання
- •5.3.4. Вихідні параметри
- •5.4. Ключове слово this
- •5.5. Конструктори
- •5.6. Властивості
- •[ Атрибути ] [ специфікатори ] тип ім’я_властивості
- •[ Get код_доступа ] [ set код_доступа ]
- •5.7. Рекомендації по програмуванню
- •Розділ 6. Масиви і рядки
- •6.1. Одновимірні масиви
- •6.2. Прямокутні масиви
- •6.3. Ступінчасті масиви
- •6.4. Клас System.Array
- •6.5. Клас Random
- •6.6. Оператор foreach
- •6.7. Масиви об’єктів
- •6.8. Символи і рядки
- •6.8.1. Символи
- •6.8.2. Масиви символів
- •6.8.3. Рядки типу string
- •6.8.4. Форматування рядків
- •6.8.5. Рядки типу StringBuilder
- •6.9. Рекомендації з програмування
- •Розділ 7. Класи: подробиці
- •7.1. Перевантаження методів
- •7.2. Рекурсивні методи
- •7.3. Методи із змінною кількістю аргументів
- •7.4. Метод Main
- •7.5. Індексатори
- •7.6. Операції класу
- •7.6.1. Унарні операції
- •7.6.2. Бінарні операції
- •7.6.3. Операції перетворення типу
- •7.7. Деструктор
- •7.8. Вкладені типи
- •7.9. Рекомендації по програмуванню
- •Розділ 8. Ієрархії класів
- •8.1. Спадкоємство
- •8.2. Віртуальні методи
- •8.3. Абстрактні класи
- •8.4. Безплідні класи
- •8.5. Клас object
- •8.6. Рекомендації по програмуванню
- •Розділ 9. Інтерфейси і структурні типи
- •9.1. Синтаксис інтерфейсу
- •9.2. Реалізація інтерфейсу
- •9.3. Робота з об'єктами через інтерфейси. Операції is і as
- •9.4. Інтерфейси і спадкоємство
- •9.5. Стандартні інтерфейси .Net
- •9.5.1. Порівняння об'єктів (інтерфейс iComparable)
- •9.5.2 Сортування по різних критеріях (інтерфейс iComparer)
- •9.5.3 Перевантаження операцій відношення
- •9.5.4. Клонування об'єктів (інтерфейс iСloneable)
- •9.5.5. Перебір об'єктів (інтерфейс iEnumerable) і ітератори
- •9.6. Структури
- •9.7. Перелічення
- •9.7.1 Операції з переліченнями
- •9.7.2. Базовий клас System.Enum
- •9.8. Рекомендації по програмуванню
- •Розділ 10. Делегати, події і потоки виконання
- •10.1. Делегати
- •10.1.1. Опис делегатів
- •10.1.2. Використання делегатів
- •10.1.3. Патерн “спостерігач”
- •10.1.4. Операції
- •10.1.5. Передача делегатів в методи
- •10.1.6. Обробка виключень при виклику делегатів
- •10.3. Багатопотокові додатки
- •10.3.1. Клас Thread
- •Lock ( вираз ) блок_операторів
- •10.3.2. Асинхронні делегати
- •10.4. Рекомендації по програмуванню
- •Розділ 11. Робота з файлами
- •11.1. Потоки байтів
- •11.2. Асинхронне уведення-виведення
- •11.3. Потоки символів
- •11.4. Двійкові потоки
- •11.5. Консольне уведення-виведення
- •11.6. Робота з каталогами і файлами
- •11.7. Збереження об'єктів (серіалізація)
- •11.8. Рекомендації по програмуванню
- •Розділ 12. Збірки, бібліотеки, атрибути, директиви
- •12.2. Створення бібліотеки
- •12.3. Рефлексія
- •12.4. Атрибути
- •12.5. Простір імен
- •12.6. Директиви препроцесора
- •# Константний_вираз
- •[ #Elif константний_вираз
- •[ #Elif константний_вираз
- •Розділ 13. Структури даних, колекції і класи-прототипи
- •13.1. Абстрактні структури даних
- •13.2. Простір імен System.Collections
- •13.3. Клас ArrayList
- •13.4. Класи-прототипи
- •13.5. Створення класу-прототипу
- •13.6. Узагальнені методи
- •13.7. Часткові типи
- •13.8. Типи, що обнуляються
- •13.9. Рекомендації по програмуванню
- •Розділ 14. Додаткові засоби с#
- •14.1. Небезпечний код
- •Unsafe блок
- •14.1.1. Синтаксис вказівок
- •14.1.2. Перетворення та ініціалізація вказівок
- •14.1.3. Операції з вказівками
- •14.2. Регулярні вирази
- •14.2.1. Метасимволи
- •14.2.2. Класи бібліотеки .Net для роботи з регулярними виразами
- •14.3. Документування у форматі xml
- •Лабораторні роботи
- •Лабораторна робота 5. Одновимірні масиви
- •Лабораторна робота 6. Двовимірні масиви
- •Лабораторна робота 7. Рядки
- •Лабораторна робота 8. Класи і операції
- •Лабораторна робота 9. Спадкоємство
- •Лабораторна робота 10. Структури
- •Лабораторна робота 11. Інтерфейси і параметризовані колекції
- •Список літератури
- •Додатки Додаток 1. Специфікатори формату для рядків с#
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 аналогічно, за винятком того, що їх методи є статичними і, отже, не вимагають створення об'єктів.