клас streamreader

C # для професіоналів

Для кого призначена ця книга

Основні теми книги

Платформа .NET пропонує нове середовище, в якій можна розробляти практично будь-який додаток, що діє під керуванням Windows, а мова C # - нова мова програмування, створена спеціально для роботи з .NET.

У цій книзі представлені всі основні концепції мови C # і платформи .NET. Повністю описується синтаксис C #, наводяться приклади побудови різних типів додатків з використанням C # - створення додатків і служб Windows, додатків і служб WWW за допомогою ASP.NET, а також елементів управління Windows і WWW Розглядаються загальні бібліотеки класів .NET, зокрема, доступ до даними за допомогою ADO.NET і доступ до служби Active Directory із застосуванням класів DirectoryServices.

Ця книга призначена для досвідчених розробників, можливо, мають досвід програмування на VB, C ++ або Java, але не використовували раніше в своїй роботі мову C # і платформу .NET. Програмістам, що застосовують сучасні технології, книга дасть повне уявлення про те, як писати програми на C # для платформи .NET.

• Всі особливості мови C #

• C # і об'єктно-орієнтоване програмування

• Програми та служби Windows

• Створення web-сторінок і web-служб за допомогою ASP NET

• Доступ до даних за допомогою ADO NET

• Створення розподілених додатків за допомогою NET Remoting

• Інтеграція з COM, COM + і службою Active Directory

Книга: C # для професіоналів. Том II

клас StreamReader

Необхідно визначити, що робити з різними методами кодування. Можна дати інструкцію StreamReader перевіряти маркери коду байтів у файлі, щоб з'ясувати метод кодування, або можна просто наказати StreamReader припускати, що файл використовує певний метод кодування.

Замість надання імені файлу для читання, можна надати посилання на інший потік.

Ця остання можливість заслуговує додаткового обговорення, так як ілюструє ще одну перевагу обґрунтування моделі читання і запису даних навколо концепції потоків. Оскільки StreamReader працює на відносно високому рівні, може виявитися корисним в ситуації, коли є інший потік, який Новомосковскет дані з деякого іншого джерела, використовувати кошти, що надаються StreamReader для обробки цього потоку, як якщо б він містив текст. Це можна зробити, передаючи висновок з цього потоку в StreamReader. Таким чином, StreamReader може використовуватися для читання і обробки даних з будь-якого джерела даних, а не тільки файлів. Це по суті ситуація, яка розглядалася раніше в відношенні класу BinaryReader. Однак в цій книзі ми будемо використовувати StreamReader тільки для прямого з'єднання з файлами.

В силу зазначених можливостей StreamReader має велике число конструкторів. Крім цього існує пара методів FileInfo. які також повертають посилання на StreamReader. OpenText () і CreateText (). Тут ми проілюструємо деякі з конструкторів.

Найпростіший конструктор отримує тільки ім'я файлу. Цей StreamReader перевірятиме маркери коду байтів, щоб визначити кодування:

StreamReader sr = new StreamReader (@ "C: My DocumentsReadMe.txt");

І навпаки, якщо бажано визначити, чи передбачається кодування UTF8:

StreamReader sr = new StreamReader (@ "C: My DocumentsReadMe.txt", Encoding.UTF8Encoding);

Ми визначаємо кодування, використовуючи одне з декількох властивостей класу, System.Text.Encoding. Цей клас є абстрактним базовим класом, з якого визначається ряд класів, які реалізують методи, реально виконують кодування тексту. Кожна властивість повертає екземпляр відповідного класу. Тут можна використовувати такі властивості:

Наступний приклад показує зчеплення StreamReader з FileStream. Перевага цього полягає в тому, що можна явно визначити, чи створювати файл і повноваження обміну такими даними, що неможливо зробити, якщо безпосередньо з'єднувати StreamReader з файлом:

FileStream fs =
new FileStream (@ "C: My DocumentsReadMe.txt", FileMode.Open,
FileAccess.Read, FileShare.None);
StreamReader sr = new StreamReader (fs);

Для цього прикладу ми уточнюємо. що StreamReader буде шукати маркери коду байтів, щоб визначся використовуваний метод кодування, так він буде робити і в наступних прикладах, де StreamReader отримують з примірника FileInfo:

FileInfo MyFile = new FileInfo (@ "C: My DocumentsReadMe.txt");
StreamReader sr = MyFile.OpenText ();

Також як з FileStream. необхідно завжди закривати StreamReader після використання. Невиконання цього призведе до файлу, що залишається заблокованим для інших процесів (якщо тільки для створення StreamReader не використовувалася FileStream зі специфікацією FileShare.ShareReadWrite).

Тепер ми перейшли до проблеми створення екземпляра StreamReader. Так само, як з класом FileStream. ми просто вказуємо різні способи читання даних і залишаємо інші, менш часто використовувані, методи StreamReader для документації MSDN.

Можливо, найпростішим у використанні є метод ReadLine (). який продовжує читання, поки не доходить до кінця рядка. Він не включає комбінацію повернення каретки-перекладу рядка, яка відзначає кінець рядка в яку повертатимуть рядку:

string NextLine = sr.ReadLine ();

Альтернатива - захопити весь залишок файлу (або строго кажучи, залишок потоку) в одному рядку:

string RestOfStream = sr.ReadToEnd ();

Можна також прочитати один символ:

int NextChar = sr.Read ();

Ця конструкція з Read () перетворює повертається символ в int. Це робиться так, тому що є можливість альтернативного повернення -1, якщо буде досягнуто кінця потоку.

Нарешті, можна прочитати заданий число символів в масив з використанням зміщення:

// прочитати 100 символів
int nChars = 100;
chr [] CharArray = new char [nChars];
int nCharsRead = sr.Read (CharArray, 0, nChars);
nCharsRead буде менше nChars. якщо запит читання зажадає більше символів, ніж залишилося в файлі.