Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Чтение из текстового файла
Теперь выясним, как программными средствами читать данные из файла, используя соответствующий тип StreamReader. Вы должны помнить, что этот класс получается из TextReader, функциональные возможности которого описаны в табл. 16.8.
Таблица 16.8. Основные члены TextReader
Член | Описание |
---|---|
Peek() | Возвращает следующий доступный символ без фактического изменения позиции указателя считывающего объекта. Значение -1 указывает позицию, соответствующую концу потока |
Read() | Читает данные входного потока |
ReadBlock() | Читает максимальное заданное число символов текущего потока и записывает данные в буфер, начиная с указанного индекса |
ReadLine() | Читает строку символов из текущего потока и возвращает данные в виде строки (пустая строка указывает EOF – конец файла) |
ReadToEnd() | Читает все символы, начиная с текущей позиции и до конца потока, и возвращает их в виде одной строки |
Если теперь расширить имеющийся класс MyStreamWriter.Reader, чтобы использовать в нем StreamReader, вы сможете прочитать текстовые данные из файла reminders.txt, как показано ниже.
static void Main(string[] args) {
Console.WriteLine("*** Забавы с StreamWriter/StreamReader ***\n");
…
// Теперь чтение данных из файла.
Console.WriteLine("Вот ваши идеи:\n");
StreamReader sr = File.OpenText("reminders.txt");
string input = null;
while ((input = sr.ReadLine()) != null) {
Console.WriteLine(input);
}
}
Выполнив программу, вы увидите символьные данные из reminders.txt, выведенные на консоль.
Непосредственное создание типов StreamWriter/StreamReader
Одной из смущающих особенностей работы с типами из System.IO является то, что часто одних и тех же результатов можно достичь в рамках множества подходов. Например, вы видели, что можно получить StreamWriter из File или из FileInfo, используя метод CreateText(). На самом деле есть еще одна возможность получения StreamWriters и StreamReaders – это непосредственное их создание. Например, наше приложение можно было бы переписать в следующем виде.
static void Main(string[] args) {
Console.WriteLine("*** Забавы с StreamWriter/StreamReader ***\n");
// Get a StreamWriter and write string data.
StreamWriter writer = new StreamWriter("reminders.txt");
…
// Now read data from file.
StreamReader sr = new StreamReader("reminders.txt");
…
}
Видеть так много идентичных, на первый взгляд, подходов к реализации ввода-вывода, может быть, немного странно, но имейте в виду, что конечным результатом здесь оказывается гибкость. Так или иначе, вы смогли увидеть, как можно извлекать символьные данные из файлов и помещать их в файлы, используя типы StreamWriter и StreamReader, и теперь мы с вами можем рассмотреть роль классов StringWriter и StringReader.
Исходный код. Проект StreamWriterReaderApp размещен в подкаталоге, соответствующем главе 16.
Работа с типами StringWriter и StringReader
Используя типы StringWriter и StringReader, вы можете обращаться с текстовой информацией, как с потоком символов в памяти. Это может оказаться полезным тогда, когда необходимо добавить символьную информацию в соответствующий буфер. В следующем примере блок строковых данных записывается в объект StringWriter, а не в файл на локальном жестком диске.
static void Main(string[] args) {
Console.WriteLine("*** Забавы с StringWriter/StringReader ***\n");
// Создание StringWriter и вывод символьных данных в память.
StringWriter strWriter = new StringWriter();
strWriter.WriteLine("He забыть о дне рождения мамы…");
strWriter.Close();
// Получение копии содержимого (сохраненного в строке) и
// вывод на консоль.
Console.WriteLine("Содержимое StringWriter:\n{0}", strWriter);
}
Ввиду того, что и StringWriter, и StreamWriter получаются из одного и того же базового класса (TextWriter), для них используется приблизительно одинаковая программная логика записи. Однако ввиду самой своей природы, класс StringWriter позволяет извлечь объект System.Text.StringBuilder с помощью метода GetStringBuilder().
static void Main(string[] args) {
Соnsоlе.WriteLine("*** Забавы с StringWriter/StringReader ***\n'');
…
// Создание StringWriter и вывод символьных данных в память.
StringWriter strWriter = new StringWriter();
…
// Получение внутреннего StringBuilder.
StringBuilder sb = strWriter.GetStringBuilder();
sb.Insert(0, "Эй!! ");
Console.WriteLine("-› {0}", sb.ToString());
sb.Remove(0, "Эй!! ".Length);
Console.WriteLine("-› {0}", sb.ToString());
}
Чтобы прочитать данные из символьного потока, используйте соответствующий тип StringReader, который (в соответствии с ожиданиями) функционирует так же, как и родственный ему класс StreamReader. Фактически класс StringReader просто переопределяет наследуемые члены, чтобы обеспечить чтение из блока символьных данных, а не из файла.
static void Main(string[] args) {
Console.WriteLine("*** Забавы с StringWriter/StringReader ***\n");
// Создание StringWriter и вывод символьных данных в память.
StringWriter strWriter = new StringWriter();
…
// Чтение данных из StringWriter.
StringReader strReader = new StringReader(writer.ToString());
string input = null;
while ((input = strReader.ReadLine()) != null) {
Console.WriteLine(input);
}
strReader.Close();
}
Исходный код.Проект StringWriterReaderApp размещен в подкаталоге, соответствующем главе 16.
Работа с BinaryWriter и BinaryReader
И последним из рассмотренных здесь средств чтения/записи будут BinaryReader и BinaryWriter, которые получаются непосредственно из System.Object. Эти типы позволяют читать и записывать дискретные типы данных в соответствующий поток в компактном двоичном формате. Класс BinaryWriter определяет чрезвычайно перегруженный метод Write(), позволяющий поместить тип данных в соответствующий поток. Вдобавок к Write(), класс BinaryWriter предлагает дополнительные члены, позволяющие получить или установить тип, производный от Stream, и обеспечить поддержку прямого доступа к данным (табл. 16.9).
Таблица 16.9. Основные члены BinaryWriter
Член | Описание |
---|---|
BaseStream | Свойство, доступное только для чтения. Обеспечивает доступ к потоку, используемому с объемом BinaryWriter |
Close() | Метод, завершающий двоичный поток |
Flush() | Метод, выполняющий очистку двоичного потока |
Seek() | Метод, устанавливающий указатель позиции в текущем потоке |
Write() | Метод, записывающий значение в текущий поток |
Класс BinaryReader дополняет функциональные возможности, предлагаемые членами BinaryWriter (табл. 16.10).
Таблица 16.10.Основные Члены BinaryReader
Член | Описание |
---|---|
BaseStream | Свойство, доступное только для чтения. Обеспечивает доступ к потоку, используемому с объектом BinaryReader |
Close() | Метод, завершающий двоичный поток чтения |
PeekChar() | Метод, возвращающий следующий доступный символ без фактического смещения указателя позиции в потоке |
Read() | Метод, считывающий заданное множество байтов или символов и запоминающий их во входном массиве |
ReadXXX() | Класс BinaryReader определяет множество методов ReadXXX(), "захватывающих" следующий тип из потока (ReadBoolean(), ReadByte(), ReadInt32() и т.д.) |
В следующем примере в новый файл *.dat записывается целый ряд типов данных,
Читать дальшеИнтервал:
Закладка: