Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .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
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Основная часть метода представлена в двух вложенных циклах for, которые создают каждую строку текста для вывода. Мы используем класс StringBuilder
для создания каждой строки по соображениям производительности. Мы будем добавлять подходящий текст для каждого байта к строке, которая представляет каждую линию 16 раз. Если каждый раз мы будем выделять новую строку и делать копию полусозданной линии, мы не только затратим много времени на выделение строк, но истратим много памяти из кучи динамической памяти. Отметим, что наше определение 'печатных' символов соответствует буквам, цифрам и символам пунктуации, как указано соответствующими статическими методами System.Char
. Мы исключили, однако, все символы со значением меньше 16 из списка печатных символов, а значит, будем перехватывать возврат каретки (13) и перевод строки (10) как двоичные символы (многострочное текстовое поле не может правильно вывести эти символы, если они встречаются отдельно внутри строки).
В конце мы закрываем поток и задаем содержимое текстового поля как массив строк, который был создан.
Чтение и запись текстовых файлов
Теоретически вполне возможно использование класса FileStream
для чтения и вывода текстовых файлов. В конце концов, мы уже продемонстрировали, как это делается. Формат, в котором выводился выше файл CivNegotiations.txt
, был не очень удобен для пользователя, но это было связано не с какой-либо внутренней проблемой класса FileStream
, а со способом, который был выбран для вывода результатов в текстовом поле.
Если известно, что определенный файл содержит текст, то будет более удобно прочитать его с помощью классов StreamReader и StreamWriter
. Это связано с тем, что эти классы работают на чуть более высоком уровне, и предназначены специально для чтения текста. Методы, которые они реализуют, способны автоматически определять, где находятся удобные точки для остановки чтения, основываясь на содержимом потока. В частности:
□ Эти классы реализуют методы для чтения или записи одной строки текста за раз ( StreamReader.ReadLine()
и StreamWriter.WriteLine()
). В случае чтения, это значит, что поток будет автоматически определять, где находится следующий перевод каретки, и остановит чтение в этой точке. В случае записи это означает, что поток будет автоматически добавлять комбинацию возврата каретки-перевода строки в записываемый текст.
□ При использовании классов StreamReader
и StreamWriter
не нужно беспокоиться об использованном в файле кодировании. Кодирование означает формат, который имел текст в содержащем его файле. Возможное кодирование включает ASCII (1 байт для каждого символа), или любой из форматов на основе Unicode, UTF7 и UTF8. Текстовые файлы в системах Windows 9х всегда являются ASCII, так как Windows 9х не поддерживает Unicode, и поэтому текстовые файлы могут теоретически содержать данные Unicode, UTF7 или UTF8 вместо данных ASCII. Соглашение состоит в том, что если файл имеет формат ASCII, значит он содержит текст. Если же любой из форматов Unicode, то он будет указан первыми двумя или тремя байтами файла, которые содержат определенную комбинацию значений для указания формата. Эти байты называются маркерами кода байтов. Когда файл открывается с помощью любого стандартного оконного приложения, такого как Notepad или WordPad, то не нужно беспокоиться об этом, так как эти приложения знакомы с различными методами кодирования и автоматически правильно считывают файл. Это также случай для класса StreamReader
, который будет правильно считывать файл в любом из этих форматов, в то время как класс StreamWriter
способен форматировать текст, который он записывает, с помощью любой запрошенной техники кодирования. С другой стороны, если требуется прочитать и вывести текстовый файл с помощью класса FileStream
, придется все это выполнять самостоятельно.
Класс StreamReader
Класс StreamReader
используется для чтения текстовых файлов. Создать StreamReader
проще, чем экземпляр FileStream
, так как некоторые из параметров FileStream
не требуются. В частности, режим и тип доступа несущественны, поскольку с помощью StreamReader
можно только читать. Также не существует непосредственного параметра для определения полномочий общего доступа. Но с другой стороны, существуют и новые параметры:
□ Необходимо определить, что делать с различными методами кодирования. Можно дать инструкцию StreamReader
проверять маркеры кода байтов в файле, чтобы выяснить метод кодирования, или можно просто приказать StreamReader
предполагать, что файл использует определенный метод кодирования.
□ Вместо предоставления имени файла для чтения, можно предоставить ссылку на другой поток.
Эта последняя возможность заслуживает дополнительного обсуждения, так как иллюстрирует еще одно преимущество обоснования модели чтения и записи данных вокруг концепции потоков. Поскольку StreamReader
работает на относительно высоком уровне, может оказаться полезным в ситуации, когда имеется другой поток, который читает данные из некоторого другого источника, использовать средства, предоставляемые StreamReader
для обработки этого потока, как если бы он содержал текст. Это можно сделать, передавая вывод из этого потока в StreamReader
. Таким образом, StreamReader
может использоваться для чтения и обработки данных из любого источника данных, а не только файлов. Это по сути ситуация, которая рассматривалась ранее в отношении класса BinaryReader
. Однако в этой книге мы будем использовать StreamReader
только для прямого соединения с файлами.
В силу указанных возможностей StreamReader
имеет большое число конструкторов. Помимо этого существует пара методов FileInfo
, которые также возвращают ссылки на StreamReader
: OpenText()
и CreateText()
. Здесь мы проиллюстрируем некоторые из конструкторов.
Простейший конструктор получает только имя файла. Этот StreamReader
будет проверять маркеры кода байтов, чтобы определить кодирование:
StreamReader sr = new StreamReader(@"C:\My Documents\ReadMe.txt");
И наоборот, если желательно определить, предполагается ли кодирование UTF8:
StreamReader sr = new StreamReader(@"C:\My Documents\ReadMe.txt", Encoding.UTF8Encoding);
Мы определяем кодирование, используя одно из нескольких свойств класса, System.Text.Encoding
. Этот класс является абстрактным базовым классом, из которого определяется ряд классов, которые реализуют методы, реально выполняющие кодирование текста. Каждое свойство возвращает экземпляр соответствующего класса. Здесь можно использовать следующие свойства:
□ ASCII
□ Unicode
□ UTF7
□ UTF8
□ BigEndianUnicode
Следующий пример показывает сцепление StreamReader
с FileStream
. Преимущество этого состоит в том, что можно явно определить, создавать ли файл и полномочия совместного доступа, что невозможно сделать, если напрямую соединять StreamReader с файлом:
Интервал:
Закладка: