Симон Робинсон - 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будет содержать одну строку файла.
Интервал:
Закладка: