- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен
Шрифт:
Интервал:
Закладка:
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 записывается целый ряд типов данных,
static void Main(string[] args) {
// Открытие сеанса двоичной записи в файл.
FileInfo f = new FileInfo("BinFile.dat");
BinaryWriter bw = new BinaryWriter(f.OpenWrite());
// Печать информации о типе BaseStream.
// (в данном случае это System.IO.FileStream) .
Console.WriteLine("Базовый поток: {0}", bv.BaseStream);
// Создание порции данных для сохранения в файле.
double aDouble = 1234.67;
int anInt = 34567;
char[] aCharArray = { 'A', 'В', 'С'};
// Запись данных.
bw.Write(aDouble);
bw.Write(anInt);
bw.Write(aCharArray);
bw.Close();
}
Обратите внимание на то, что объект FileStream, возвращенный из FileInfo.OpenWrite(), передается конструктору типа BinaryWriter. С помощью такого подхода очень просто выполнить "расслоение" потока перед записью данных. Следует осознавать, что конструктор BinaryWriter способен принять любой тип, производный от Stream (например, FileStream, MemoryStream или BufferedStream). Поэтому, если нужно записать двоичные данные, например, в память, просто укажите подходящий объект MemoryStream.
Для чтения данных из файла BinFile.dat тип BinaryReader предлагает множество опций. Ниже мы используем PeekChar(), чтобы выяснить, имеет ли поток еще данные, и в том случае, когда он их имеет, использовать ReadByte() для получения значения. Обратите внимание на то, что байты форматируются в шестнадцатиричном виде и между ними вставляются семь пробелов.
static void Main(string[] args) {
// Открытие сеанса двоичной записи в файл.
FileInfo f = new FileInfo("BinFile.dat");
…
// Чтение данных в виде "сырых" байтов.
BinaryReader br = new BinaryReader(f.OpenRead());
int temp = 0;
while (br.PeekChar() != -1) {
Console.Write("{0,7:x}", br.ReadByte());
if (++temp == 4) {
// Запись каждых 4 байтов в виде новой строки.
Console.WriteLine();
temp = 0;
}
Console.WriteLine();
}
}
Исходный код. Проект BinaryWriterReader размещен в подкаталоге, соответствующем главе 16.
Вывод этой программы показан на рис. 16.9.
Рис. 16.9. Чтение байтов из двоичного файла
Программный мониторинг файлов
Теперь, когда вы уже знаете возможности различных средств чтения и записи давайте, рассмотрим роль класса FileSystemWatcher. Этот тип может быть исключительно полезен тогда, когда требуется программный мониторинг файлов, имеющихся в данной системе. В частности, с помощью типа FileSystemWatcher можно контролировать любые из действий, указанных в перечне NotifyFilters (значения его членов очевидны, но в случае необходимости более точную информацию можно получить с помощью справочной системы).
publiс enum System.IO.NotifyFilters {
Attributes, СreationTime,
DirectoryName, FileName,
LastAccess, LastWrite,
Security, Size,
}
Первым делом для работы с типом FileSystemWatcher нужно установить свойство Path, с помощью которого можно указать имя (и место размещения) каталога, содержащего контролируемые файлы, и свойство Filter, с помощью которого определяются расширения контролируемых файлов.
После этого можно указать обработку событий Сhanged, Created и Deleted, которые работают в совокупности с делегатом FileSystemEventHandler. Этот делегат может вызывать любой метод, соответствующий следующему шаблону.
// Делегат FileSystemEventHandler должен указывать на методы,
// имеющие следующую сигнатуру.
void MyNotifacationiHandler(object source, FileSystemEventArgs e)
Точно так же событие Renamed можно обработать с помощью типа делегата RenamedEventHandler, способного вызывать методы, соответствующие следующему шаблону.
// Делегат RenamedEventHandler должен указывать на методы,
// имеющие следующую сигнатуру.
void MyNotificationHandler(object source, RenamedEventArgs e)
Для иллюстрации процесса мониторинга файлов предположим, что мы создали на диске C новый каталог с именем MyFolder, cодержащий различные файлы *.txt (назовите их так, как пожелаете). Следующее консольное приложение осуществляет мониторинг файлов *.txt а каталоге MyFоlder и выводит сообщения о событиях, соответствующих созданию, удалению, изменению или переименованию файлов.
static void Main(string[] args) {
Console.WriteLine("***** Чудесный монитор файлов *****n");
// Установка пути для каталога наблюдения.
FileSystemWatcher watcher = new FileSystemWatcher();
try {
watcher.Path = @"C:MyFolder";
} catch(ArgumentException ex) {
Console.WriteLine(ex.Message);
return;
}
// Установка фильтров наблюдения.