Симон Робинсон - 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
FileStream fs =
new FileStream(@"C:\My Documents\ReadMe.txt", FileMode.Open,
FileAccess.Read, FileShare.None);
StreamReader sr = new StreamReader(fs);
Для этого примера мы уточняем., что StreamReader
будет искать маркеры кода байтов, чтобы определись используемый метод кодирования, так он будет делать и в следующих примерах, где StreamReader
получают из экземпляра FileInfo
:
FileInfo MyFile = new FileInfo(@"C:\My Documents\ReadMe.txt");
StreamReader sr = MyFile.OpenText();
Также как с FileStream
, необходимо всегда закрывать StreamReader
после использования. Невыполнение этого приведет к файлу, остающемуся заблокированным для других процессов (если только для создания StreamReader
не использовался FileStream
со спецификацией FileShare.ShareReadWrite
).
sr.Close();
Теперь мы перешли к проблеме создания экземпляра 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
, если запрос чтения потребует больше символов, чем осталось в файле.
Класс StreamWriter
Он работает практически таким же образом, как и StreamReader
, за исключением того только, что StreamWriter
используется для записи в файл (или в другой поток). Возможности создания StreamWriter
включают в себя:
StreamWriter sw = new StreamWriter(@"C:\My Documents\ReadMe.txt");
Приведенный выше код будет использовать кодирование UTF8, которое рассматривается в .NET как метод кодирования по умолчанию. Если желательно определить альтернативное кодирование:
StreamWriter sw = new StreamWriter(@"C:\My Docurnents\ReadMe.txt", true, Encoding.ASCII);
В этом конструкторе вторым параметром является Boolean, который указывает, должен ли файл быть открыт для добавления. Странно, но не существует конструктора, который получает только имя файла и класс кодирования.
Конечно, можно соединить StreamWriter
с файловым потоком, чтобы предоставить больший контроль над параметрами открытия файла:
FileStream fs = new FileStream(@"C:\Му Documents\ReadMe.txt",
FileMode.CreateNew, FileAcces.Write, FileShare.ShareRead);
StreamWriter sw = new StreamWriter(fs);
FileInfo
не реализует никаких методов, которые возвращают StreamWriter
. Альтернативно, если вы захотите создать новый файл и начать записывать в него данные, то может оказаться полезной такая последовательность действий:
FileInfo MyFile = new FileInfo(@"C:\My Documents\NewFile.txt");
StreamWriter sw = MyFile.CreateText();
Так же, как и со всеми другими потоковыми классами, важно закрыть StreamWriter
, когда работа закончена:
sw.Close();
Запись в поток делается с помощью любого из четырех перегружаемых методов StreamWriter.Write()
. Простейший из них записывает строку и дополняет ее комбинацией возврат каретки — перевод строки:
string NextLine = "Groovy Line";
sw.Write(NextLine);
Можно также записать один символ:
char NextChar = 'а';
sw.Write(NextChar);
Массив символов также возможен:
char [] Char Array = new char[100];
// инициализация этого массива символов
sw.Write(CharArray);
Можно даже записать часть массива символов:
int nCharsToWrite = 50;
int StartAtLocation = 25;
char [] CharArray = new char[100];
// инициализируем эти символы
sw.Write(CharArray, StartAtLocation, nCharsToWrite);
Пример: ReadWriteText
Пример ReadWriteText
выводит результат использования классов StreamReader
и StreamWriter
. Он похож на предыдущий пример ReadBinaryFile
, но предполагает, что считываемый файл является текстовым файлом, и выводит его в этом виде. Он может сохранить файл (со всеми изменениями, которые будут сделаны в тексте в текстовом поле). Он будет сохранять любой файл в формате Unicode.
Снимок показывает использование ReadWriteText
для вывода того же файла CivNegotiations
, который использовался раньше. В этот раз, однако, мы сможем прочитать содержимое гораздо легче.

Не будем вдаваться в детали добавления методов обработки событий для диалога открытия файла, поскольку они по сути такие же, что и в примере BinaryFileReader
. Как и для данного примера, открытие нового файла приводит к вызову метода DisplayFile()
. Единственное реальное различие между этим примером и предыдущим состоит в реализации DisplayFile
, а также в том факте, что теперь имеется возможность сохранить файл. Она представлена другим пунктом меню — save. Обработчик для этого пункта вызывает другой добавленный в код метод — SaveFile()
. (Отметим, что этот файл всегда перезаписывает первоначальный файл, этот пример не имеет возможности записи в другой файл.)
Посмотрим сначала на SaveFile
, так как это простейшая функция. Мы просто записываем каждую строку текстового поля по очереди в поток StreamWriter
, полагаясь на метод StreamReader.WriteLine()
для добавления комбинации возврата каретки-перевода строки в конце каждой строки:
void SaveFile() {
StreamWriter sw = new StreamWriter(ChosenFile, false, Encoding.Unicode);
foreach (string Line in textBoxContents.Lines) sw.WriteLine(Line);
sw.Close();
}
ChosenFile
является строковым полем основной формы, которое содержит имя прочитанного файла (как и в предыдущем примере). Отметим, что при открытии потока определяется кодирование Unicode. Если желательно записывать файлы в другом формате, необходимо изменить значение этого параметра. Второй параметр в этом конструкторе будет задан как true, если мы хотим добавлять к файлу, но в данном случае мы этого не делаем. Кодирование должно задаваться во время создания объекта записи потока. В дальнейшем оно доступно только для чтения как свойство Encoding
.
Теперь проверим, как считываются файлы. Процесс чтения осложняется тем, что мы не знаем, пока не прочитаем файл, сколько строк он будет содержать (другими словами, сколько последовательностей (char)13 - (char)10
находится в файле). Решим эту проблему, считывая сначала файл в экземпляр класса StringCollection
, который находится в пространстве имен System.Collections.Specialized
. Этот класс создан для хранения множества строк, которые могут динамически увеличиваться. Он реализует два интересующих нас метода: Add()
, добавляющий строку в коллекцию, и CopyTo()
, который копирует коллекцию строк в обычный массив (экземпляр System.Array
). Каждый элемент объекта StringCollection
будет содержать одну строку файла.
Интервал:
Закладка: