2. В цьому модулі:
Модель потоків в C#. Простір імен System.IO. Клас Stream
Аналіз байтових, символьних та двійкових класів потоків
Використання класу FileStream для файлових операцій
Використання класу StreamWriter і StreamReader для файлових
операцій
Використання класу BinaryWriter і BinaryReader для файлових
операцій
Використання класу Directory, DirectoryInfo, File, FileInfo для
файлових операцій
Регулярні вирази
2
Andriy Gladkyy
KspDevelop@gmail.com
3. Модель потоків в C#. Простір імен System.IO.
Клас Stream
Практично будь які операції, пов’язані з введенням/виведення будь
якої послідовності байт (файл, пристрій введення/виведення, потік
шифрування і т. д.) в .NET реалізуються за допомогою потоків.
Базовий клас для всіх потоків – System.IO.Stream.
Клас Stream і його похідні класи представляють універсальне
представлення різних типів введення/виведення, ізолюючи
програміста від окремих свідчень операційної системи і базових
пристроїв
Деяка реалізація потоків виконую локальну буферизацію основних
даних для покращення продуктивності. В таких потоках, для
видалення внутрішніх буферів і забезпечення запису всіх даних в
основне джерело даних або сховище об’єктів можна використовувати
метод Flush.
Під час виклику метода Close для класу Stream всі дані буфера будуть
очищені, тобто викликається метод Flush.
Метод Close також вивільняє такі ресурси операційної системи як:
дескриптори файлів, мереживі підключення або пам’ять, для
внутрішньої буферизації.
Andriy Gladkyy
KspDevelop@gmail.com 3
4. Аналіз байтових, символьних та двійкових класів потоків
Багато потоків, які працюють безпосередньо з пристроями
введення/виведення, вміють писати/читати лише послідовність
байт. Це не зовсім зручно. Тому в .Net існують класи наслідники від
Stream, які вміють працювати з більш складними типами даних. Це
класи:
◦ StreamReader
◦ StreamWriter
◦ BinaryReader
◦ BinaryWriter
Andriy Gladkyy
KspDevelop@gmail.com 4
5. Використання класу FileStream для файлових операцій
Клас FileStream представляє собою файловий потік.
Дозволяє проводити операції читання і запис з файлів.
Підтримує метод Seek, що дозволяє переміщувати положення курсору
в файлі.
Даний клас дозволяє працювати з файлом, як з послідовністю байт і
відповідно не підтримує напряму читання і запис інших типів даних.
Andriy Gladkyy
KspDevelop@gmail.com 5
7. Конструктор FileStream
Першим параметром передається шлях до файлу типу string
Другим параметром – змінна типу FileMode (перерахування). Описує
яким чином файл повинен бути відкритий операційною системою
Andriy Gladkyy
KspDevelop@gmail.com 7
8. Andriy Gladkyy
KspDevelop@gmail.com 8
Третій параметр – змінна типу FileAccess (перерахування, що містить
атрибут FlagAtribute, тобто підтримує побітове з’єднання складових
його значень за допомогою оператора | ). Він описує, яким чином
здійснюється доступ до файлу:
◦ FileAccess.Write – запис
◦ FileAccess.Read – читання
◦ FileAccess.ReadWrite – читання/запис
Четвертий параметр – змінна типу FileShare (також перерахування,
містить атрибут FlagAtribute). Цей параметр дозволяє керувати
доступом, який інші об’єкти FileStream зможуть здійснювати до цього
файлу.
10. Використання класу StreamWriter і StreamReader для файлових операцій
Дані класи можуть самостійно працювати з текстовими файлами – для
цього необхідно використати відповідний конструктор.
Демонстрація
Andriy Gladkyy
KspDevelop@gmail.com 10
11. Andriy Gladkyy
KspDevelop@gmail.com 11
При роботі з даними класами варто звернути увагу на наступні моменти.
В об’єктів типу StreamWriter є булева властивість AutoFlush, якщо
встановити його в true можна не викликати кожного разу метод Flush().
Методи Write() і WriteLine() приймають об’єкти різних типів,
викликаючи метод ToString().
Дані методи підтримують форматування рядків, використовуючи для
цього String.Format().
В об’єктів типу StreamReader є булева властивість EndOfStream, яка
показує чи не досягли ми кінця потоку. Також для об’єктів визначено
декілька методів для читання:
◦ Read() – читає наступний символ або масив символів
◦ ReadBlock() – читає масив символів
◦ ReadLine() – читає рядок від поточної позиції до символу переходу на новий
рядок
◦ ReadToEnd() – читає потік від поточної позиції до кінця файлу
12. Використання класу BinaryWriter і BinaryReader для файлових
операцій
Дані класи призначені для запису/читання простих типів значень, а
також рядків у відповідному кодуванні.
Ці класи мають перевантажений конструктор, в яких можна задати
кодування для роботи з рядками
Демонстрація
Об’єкти класу BinaryWriter мають лише один метод для запису Write(),
який має декілька перевантажених варіантів, що приймають об’єкти
різних типів даних.
Об’єкти класу BinaryReader мають декілька методів, призначених для
читання різних типів даних.
Andriy Gladkyy
KspDevelop@gmail.com 12
13. Використання класу Directory, DirectoryInfo, File, FileInfo для
файлових операцій
Дані класи призначенні для роботи з файлами і папками
Directory і DirectoryInfo – для роботи з папками
File і FileInfo – для роботи з файлами
Різниця між цими класами в тому, що класи Directory і File статичні, а
DirectoryInfo і FileInfo дозволяють створити об’єкт
Демонстрація
Andriy Gladkyy
KspDevelop@gmail.com 13
14. Основні методи класів Directory і DirectoryInfo; File і FileInfo
Andriy Gladkyy
KspDevelop@gmail.com 14
15. Основні методи класів Directory і DirectoryInfo; File і FileInfo
Andriy Gladkyy
KspDevelop@gmail.com 15
16. Статичний клас для роботи з шляхами
Andriy Gladkyy
KspDevelop@gmail.com 16
17. Регулярні вирази
.Net Framework має вбудовану підтримку регулярних виразів.
Класи, які здійснюють роботу з регулярними виразами розміщені в
просторі імен System.Text.RegularExpression
Класи простору імен System.Text.RegularExpression
Andriy Gladkyy
KspDevelop@gmail.com 17
18. Регулярні вирази
Ключовий клас, який дозволяє створити регулярний вираз – Regex,
має декілька конструкторів:
◦ new Regex (string pattern)
◦ new Regex (string pattern, RegexOptions options)
Patterns – маска регулярного виразу, створена відповідно до синтаксису. За
допомогою неї буде здійснюватись пошук в тексті
Options - додаткові параметри, перерахування типу RegexOptions, які мають
атрибут FlagsAttribute. Дане перерахування має наступні значення:
Andriy Gladkyy
KspDevelop@gmail.com 18
20. Демонстрація
В запропонованому тексті будемо знаходити і заміняти ділянки, що
відповідають масці регулярного виразу.
Andriy Gladkyy
KspDevelop@gmail.com 20
21. Спеціальні символи в масках для регулярних
виразів
Andriy Gladkyy
KspDevelop@gmail.com 21