Вход/Регистрация
Полное руководство. С# 4.0
вернуться

Шилдт Герберт

Шрифт:

Запоминающие потоки очень полезны для программирования. С их помощью можно, например, организовать сложный вывод с предварительным накоплением данных в массиве до тех пор, пока они не понадобятся. Этот прием особенно поле зен для программирования в такой среде с графическим пользовательским интер фейсом, как Windows. Кроме того, стандартный поток может быть переадресован из массива. Это может пригодиться, например, для подачи тестовой информации в программу. Применение классов StringReader и StringWriter

Для выполнения операций ввода-вывода с запоминанием в некоторых приложе ниях в качестве базовой памяти иногда лучше использовать массив типа string, чем массив типа byte. Именно для таких случаев и предусмотрены классы StringReader и StringWriter. В частности, класс StringReader наследует от класса TextReader, а класс StringWriter — от класса TextWriter. Следовательно, они представля ют собой потоки, имеющие доступ к методам, определенным в этих двух базовых классах, что позволяет, например, вызывать метод ReadLine для объекта класса StringReader, а метод WriteLine — для объекта класса StringWriter.

Ниже приведен конструктор класса StringReader: StringReader(string s)

где s обозначает символьную строку, из которой производится чтение.

В классе StringWriter определено несколько конструкторов. Ниже представлен один из наиболее часто используемых. StringWriter

Этот конструктор создает записывающий поток, который помещает выводимые данные в строку. Для получения содержимого этой строки достаточно вызвать метод ToString.

Ниже приведен пример, демонстрирующий применение классов StringReader и StringWriter. // // Продемонстрировать применение классов StringReader и StringWriter. using System; using System.IO; class StrRdrWtrDemo { static void Main { StringWriter strwtr = null; StringReader strrdr = null; try { // Создать объект класса StringWriter. strwtr = new StringWriter; // Вывести данные в записывающий поток типа StringWriter. for (int i=0; i < 10; i++) strwtr.WriteLine("Значение i равно: " + i); // Создать объект класса StringReader. strrdr = new StringReader(strwtr.ToString); //А теперь ввести данные из считывающего потока типа StringReader. string str = strrdr.ReadLine; while(str != null) { str = strrdr.ReadLine; Console.WriteLine(str); } } catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода\n" + exc.Message); } finally { // Освободить ресурсы считывающего и записывающего потоков. if(strrdr != null) strrdr.Close; if(strwtr != null) strwtr.Close; } } }

Вот к каком результату приводит выполнение этого кода. Значение i равно: 1 Значение i равно: 2 Значение i равно: 3 Значение i равно: 4 Значение i равно: 5 Значение i равно: 6 Значение i равно: 7 Значение i равно: 8 Значение i равно: 9

В данном примере сначала создается объект strwtr класса StringWriter, в кото рый выводятся данные с помощью метода WriteLine. Затем создается объект класса StringReader с использованием символьной строки, содержащейся в объекте strwtr. Эта строка получается в результате вызова метода ToString для объекта strwtr. И наконец, содержимое данной строки считывается с помощью метода ReadLine. Класс File

В среде .NET Framework определен класс File, который может оказаться полезным для работы с файлами, поскольку он содержит несколько статических методов, выпол няющих типичные операции над файлами. В частности, в классе File имеются методы для копирования и перемещения, шифрования и расшифровывания, удаления фай лов, а также для получения и задания информации о файлах, включая сведения об их существовании, времени создания, последнего доступа и различные атрибуты файлов (только для чтения, скрытых и пр.). Кроме того, в классе File имеется ряд удобных ме тодов для чтения из файлов и записи в них, открытия файла и получения ссылки типа FileStream на него. В классе File содержится слишком много методов для подроб ного их рассмотрения, поэтому мы уделим внимание только трем из них. Сначала бу дет представлен метод Сору, а затем — методы Exists и GetLastAccessTime. На примере этих методов вы сможете получить ясное представление о том, насколь ко удобны методы, доступные в классе File. И тогда вам станет ясно, что класс File определенно заслуживает более тщательного изучения.

СОВЕТ Ряд методов для работы с файлами определен также в классе FileInfo. Этот класс отли чается от класса File одним, очень важным преимуществом: для операций над файлами он пре доставляет методы экземпляра и свойства, а не статические методы. Поэтому для выполнения нескольких операций над одним и тем же файлом лучше воспользоваться классом FileInfo. Копирование файлов с помощью метода Сору

Ранее в этой главе демонстрировался пример программы, в которой файл копиро вался вручную путем чтения байтов из одного файла и записи в другой. И хотя задача копирования файлов не представляет особых трудностей, ее можно полностью авто матизировать с помощью метода Сору, определенного в классе File. Ниже пред ставлены две формы его объявления. static void Copy (string имя_исходного_файла, string имя_целевого_файла) static void Copy (string имя_исходного_файла, string имя_целевого_файла, boolean overwrite)

Метод Copy копирует файл, на который указывает имяисходногофайла, в файл, на который указывает имяцелевогофайла. В первой форме данный метод копирует файл только в том случае, если файл, на который указывает имяцелево- гофайла, еще не существует. А во второй форме копия заменяет и перезаписывает целевой файл, если он существует и если параметр overwrite принимает логическое значение true. Но в обоих случаях может быть сгенерировано несколько видов исклю чений, включая IOException и FileNotFoundException.

В приведенном ниже примере программы метод Сору применяется для копи рования файла. Имена исходного и целевого файлов указываются в командной строке. Обратите внимание, насколько эта программа короче демонстрировавшейся ранее. Кроме того, она более эффективна. /* Скопировать файл, используя метод File.Copy. Чтобы воспользоваться этой программой, укажите имя исходного и целевого файлов. Например, чтобы скопировать файл FIRST.DAT в файл SECOND.DAT, введите в командной строке следующее: CopyFile FIRST.DAT SECOND.DAT */ using System; using System.IO; class CopyFile { static void Main(string[] args) { if(args.Length != 2) { Console.WriteLine("Применение : CopyFile Откуда Куда"); return; } // Копировать файлы. try { File.Copy(args[0], args[1]); } catch(IOException exc) { Console.WriteLine("Ошибка копирования файла\n" + exc.Message); } } }

  • Читать дальше
  • 1
  • ...
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: