
- •Тема 1 Колекції Структури даних
- •Неузагальнені колекції
- •Деякі інтерфейси неузагальнених колекцій
- •Деякі класи неузагальнених колекцій
- •Узагальнені колекції
- •Тема 2 Файловий ввід-вивід Організація файлового вводу-виводу
- •Байтовий ввід-вивід у файл
- •Двійковий ввід-вивід у файл
- •Символьний ввід-вивід у файл
- •Організація роботи із файлами даних стандарту xml
- •Простір імен System.Xml
- •Класи XmlNode та XmlLinkedNode
- •Клас XmlDeclaration
- •Класи XmlComment та XmlAttribute
- •Клас XmlElement
- •Клас XmlDocument
- •Приклад
- •Тема 3 Делегати та події Клас delegate
- •Делегати в якості параметрів
- •Анонімні методи та узагальнені делегати System.Action, System.Func
- •Комбіновані делегати та шаблон «спостерігач»
- •Події: створення та обробка
Байтовий ввід-вивід у файл
Для створення байтового потоку, зв’язаного із фізичним файлом, у мові C# визначенний клас потоку FileStream. Цей клас є похідним від класу Stream. Основні можливості цього класу визначаються елементами базового класу. Із власних елементів класу FileStream відмітимо тільки наступний:
Елемент класу FileStream |
Призначення |
public FileStream(string path, FileMode mode);
public FileStream(string path, FileMode mode, FileAccess access); |
Найбільш часто уживані конструктори. Перший ініціалізує новий екземпляр класу System.IO.FileStream за вказаним абсолютним або відносним шляхом path до файлу та режимом відкриття файлу mode. У другому варіанті є можливість додатково вказати режим доступу до файлу. |
На прикладі класу FileStream покажемо загальні принципи, яких потрібно дотримуватись, при організації роботи із будь-якими файловими потоками у програмі.
Робота із файлами повинна починатися зі створення відповідного потоку та зв’язування його із фізичним файлом. Однак така операція може викликати різні помилки часу виконання. До таких помилок, наприклад, можуть призвести помилки у назві існуючого файлу або відсутність вільного місця на диску, тощо. Тому рекомендується завжди контролювати відповідну операцію. Цей контроль зводиться до обробки виняткових ситуацій у програмі, наприклад:
System.IO.FileNotFoundException − файла із вказаним іменем у вказаному каталозі не існує;
System.IO.ArgumentException − невірно заданий режим відкриття файлу;
System.IO.IOException − файл не відкривається через помилки вводу-виводу.
Можливі й інші виключні ситуації. Для обробки найбільш імовірних помилок файлового вводу-виводу можна дотримуватись шаблону, який використано нами при програмній реалізації наступної задачі.
Реалізувати клас для визначення розміру довільного файлу у різних одиницях вимірювання інформації. |
// перелік, що задає одиниці вимірювання інформації public enum Metric { B = 0, // байт (абревіатура від BinarY TErm) kB = 1, // кілобайт (2^10 байт) MB = 2, // мегабайт (2^20 байт) GB = 3, // гігабайт (2^30 байт) TB = 4, // терабайт (2^40 байт) PB = 5, // петабайт (2^50 байт) EB = 6, // ексабайт (2^60 байт) ZB = 7, // зетабайт (2^70 байт) YB = 8 // йотабайт (2^80 байт) }
public class FileSize { public static double SizeOf(string FileName, Metric metric) { // Пробуємо створити байтовий потік . try { // 1. Створення потоку та зв’язування його із фізичним файлом. FileStream f = new FileStream(FileName, FileMode.Open); // 2. Дії із файлом double size = f.Length; // 3. Закриття файлу. f.Close(); // інші дії switch (metric) { case Metric.kB: return size / (Math.Pow(2, 10)); case Metric.MB: return size / (Math.Pow(2, 20)); case Metric.GB: return size / (Math.Pow(2, 30)); case Metric.TB: return size / (Math.Pow(2, 40)); case Metric.PB: return size / (Math.Pow(2, 50)); case Metric.EB: return size / (Math.Pow(2, 60)); case Metric.ZB: return size / (Math.Pow(2, 70)); case Metric.YB: return size / (Math.Pow(2, 80)); default: return size; } } catch (FileNotFoundException e) { Console.WriteLine(e.Message); Console.WriteLine("Перевірте правильність імені файлу!"); return 0; } catch (Exception e) { Console.WriteLine("Помилка: " + e.Message); return 0; } } } |
Статичний метод SizeOf класу FileSize може бути використаний для визначення розміру довільного файлу. Наприклад:
Console.WriteLine(FileSize.SizeOf(@"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\csc.exe", Metric.MB) + " MB"); |