Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
swriterAppend.Close();
}
Вы должны догадаться сами, что тип StreamWriter предлагает способ записи символьных данных в соответствующий файл.
Работа с типом File
Тип File предлагает функциональные возможности, почти идентичные возможностям типа FileInfo, но с помощью ряда статических членов. Подобно FileInfo, тип File предлагает методы AppendText(), Create(), CreateText(), Open(), OpenRead(), OpenWrite() и OpenText(). Во многих случаях типы File и
FileStream оказываются взаимозаменяемыми. Так, в каждом из предыдущих примеров вместо FileStream можно использовать тип File.
static void Main(string[] args) {
// Получение объекта FileStream с помощью File.Create() .
FileStream fs = File.Create(@"C:\Test.dat");
fs.Close();
// Получение объекта FileStream с помощью File.Open().
FileStream fs2 = File.Open(@"C:\Test2.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
fs2.Close();
// Получение объекта FileStream с доступом только для чтения.
FileStream readOnlyStream = File.OpenRead(@"Test3.dat");
readOnlyStream.Close();
// Получение объекта FileStream с доступом только для записи.
FileStream writeOnlyStream = File.OpenWrite(@"Test4.dat");
writeOnlyStream.Close();
// Получение объекта StreamReader.
StreamReader sreader = Filе.OpenText(@"C:\boot.ini");
sreader.Close();
// Получение нескольких объектов StreamWriter.
StreamWriter swriter = File.CreateText(@"C:\Test3.txt");
swriter.Close();
StreamWriter swriterAppend = File.AppendText(@"C:\FinalTest.txt");
swriterAppend.Close();
}
Новые члены File в .NET 2.0
В отличие от FileInfo, тип File поддерживает (в .NET 2.0) несколько своих собственных уникальных членов, описания которых приводятся в табл. 16.5. С помощью этих членов можно существенно упростить процессы чтения и записи текстовых данных.
Таблица 16.5.Методы типа File
Метод | Описание |
---|---|
ReadAllBytes() | Открывает указанный файл, возращает двоичные данные в виде массива байтов, а затем закрывает файл |
ReadAllLines() | Открывает указанный файл, возращает символьные данные в виде массива строк, а затем закрывает файл |
ReadAllText() | Открывает указанный файл, возращает символьные данные в виде System.String, а затем закрывает файл |
WriteAllBytes() | Открывает указанный файл, записывает массив байтов, а затем закрывает файл |
WriteAllLines() | Открывает указанный файл, записывает массив строк, а затем закрывает файл |
WriteAllText() | Открывает указанный файл, записывает символьные данные, а затем закрывает файл |
При использовании этих новых методов типа File для чтения и записи пакетов данных потребуется всего несколько строк программного кода. Более того, каждый из указанных новых членов автоматически закрывает соответствующий дескриптор файла, например:
class Program {
static void Main(string[] args) {
string[] myTasks = { "Прочистить сток в ванной", "Позвонить Саше и Сереже", "Позвонить родителям", "Поиграть с ХВох" };
// Записать все данные в файл на диске C.
File.WriteAllLines(@"C:\tasks.txt", myTasks);
// Прочитать все снова и напечатать.
foreach (string task in File.ReadAllLines(@"C:\tasks.txt")) {
Console.WriteLine("Нужно сделать: {0}", task);
}
}
}
Очевидно, когда вы хотите быстро получить дескриптор файла, тип File избавит вас от необходимости ввода нескольких лишних строк. Однако преимущество предварительного создания объекта FileInfo заключается в том, что тогда вы получаете возможность исследовать соответствующий файл с помощью членов абстрактного базового класса FileSystemInfо.
static void Main(string[] args) {
// Вывод информации о файле boot.ini
// с последующим открытием доступа только для чтения.
FileInfo bootFile = new FileInfо(@"C:\boot.ini");
Console.WriteLine(bootFile.CreationTime);
Console.WriteLine(bootFile.LastAccessTime);
FileStream readOnlyStream = bootFile.OpenRead();
readOnlyStream.Close();
}
Абстрактный класс Stream
К этому моменту вы уже видели множество способов получения объектов FileStream, StreamReader и StreamWriter, но вам придется еще читать и записывать данные файлов, связанных с этими типами. Чтобы понять, как это делается, нужно ознакомиться с понятием потока. В "мире" ввода-вывода поток представляет порцию данных. Потоки обеспечивают общую возможность взаимодействия с последовательностями байтов, независимо от того, на устройстве какого вида (в файле, сетевом соединении, принтере и т.п.) они хранятся или отображаются.
Абстрактный класс System.IO.Stream определяет ряд членов, обеспечивающих поддержку синхронного и асинхронного взаимодействия с носителем данных (скажем, с файлом или областью памяти). На рис. 16.6 показано несколько потомков типа Stream.

Рис. 16.6. Типы, производные от Stream
Замечание.Следует знать, что понятие потока применимо не только к файлам или области памяти. Без сомнения, библиотеки .NET обеспечивают потоковый доступ к сетям и другим связанным с потоками абстракциям.
Напомним, что потомки stream представляют данные в виде "сырого" потока байтов, поэтому работа с потоками может быть весьма непонятной. Некоторые относящиеся к Stream типы поддерживают поиск – этот термин, по сути, означает процесс получения он изменения текущей позиции в потоке. Чтобы понять функциональные возможности, предлагаемые классом Stream, рассмотрите его базовые члены, описанные в табл. 16.6.
Таблица 16.6.Абстрактные члены Stream
Члены | Описание |
---|---|
CanRead CanSeek CanWrite | Определяет, поддерживает ли текущий поток чтение, поиск и/или запись |
Close() | Завершает текущий поток и освобождает все связанные с текущим потоком ресурсы (например, сокеты и дескрипторы файлов) |
Flush() | Обновляет связанный источник данных или хранилище в соответствии с текущим состоянием буфера, а затем очищает буфер. Если поток не реализует буфер, этот метод не делает ничего |
Length | Возвращает длину потока в байтах |
Position | Определяет позицию в текущем потоке |
Read() ReadByte() | Читает последовательность байтов (или один байт) из текущего потока и сдвигает указатель позиции в соответствии со считанным числом байтов |
Seek() | Устанавливает указатель в заданную; позицию в текущем потоке |
SetLength() | Устанавливает длину текущего потока |
Write() WriteByte() | Записывает последовательность байтов (или один байт) в текущий поток и сдвигает указатель позиции в соответствии со считанным числом байтов |
Работа с FileStream
Класс FileStream обеспечивает реализацию абстрактных членов Stream в виде, подходящем для файловых потоков. Это довольно примитивный поток – он может читать или записывать только один байт или массив байтов. На самом деле необходимость непосредственного взаимодействия с членами типа FileStream возникает очень редко. Вы чаще будете использовать различные упаковщики потоков, которые упрощают работу с текстовыми данными или типами .NET. Однако для примера давайте поэкспериментируем со средствами синхронного чтения/записи типа FileStream.
Читать дальшеИнтервал:
Закладка: