Читаем C# 4.0: полное руководство полностью

где путь — это имя открываемого файла, включая полный путь к нему. Если во второй форме этого конструктора значение параметра append равно true, то выводимые данные присоединяются в конец существующего файла. В противном случае эти данные перезаписывают содержимое указанного файла. Но независимо от формы конструктора файл создается, если он не существует. При появлении ошибок ввода-вывода в обоих случаях генерируется исключение IOException. Кроме того, могут быть сгенерированы и другие исключения.

Ниже приведен вариант представленной ранее сервисной программы ввода с клавиатуры и вывода на диск, измененный таким образом, чтобы открывать выходной файл средствами самого класса StreamWriter.

// Открыть файл средствами класса StreamWriter.

using System;

using System.IO;

class KtoD {

  static void Main() {

    string str;

    StreamWriter fstr_out = null;

    try {

      // Открыть файл, заключенный в оболочку класса StreamWriter.

      fstr_out = new StreamWriter("test.txt");

      Console.WriteLine("Введите текст, а по окончании — 'стоп'.");

      do {

        Console.Write (": ");

        str = Console.ReadLine();

        if(str != "стоп") {

          str = str + "\r\n"; // добавить новую строку

          fstr_out.Write(str);

        }

      } while(str != "стоп");

    } catch(IOException exc) {

      Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);

    } finally {

      if(fstr_out != null) fstr_out.Close() ;

    }

  }

}

Применение класса StreamReader

Для создания символьного потока ввода достаточно заключить байтовый поток в оболочку класса StreamReader. В классе StreamReader определено несколько конструкторов. Ниже приведен наиболее часто используемый конструктор:

StreamReader(Stream поток)

где поток обозначает имя открытого потока. Этот конструктор генерирует исключение ArgumentNullException, если поток оказывается пустым, а также исключение ArgumentException, если поток не открыт для ввода. После своего создания объект класса StreamReader выполняет автоматическое преобразование байтов в символы. По завершении ввода из потока типа StreamReader его нужно закрыть. При этом закрывается и базовый поток.

В приведенном ниже примере создается простая сервисная программа ввода с диска и вывода на экран содержимого текстового файла test.txt. Она служит дополнением к представленной ранее сервисной программе ввода с клавиатуры и вывода на диск.

// Простая сервисная программа ввода с диска и вывода на экран,

// демонстрирующая применение класса StreamReader.

using System;

using System.IO;

class DtoS {

  static void Main() {

    FileStream fin;

    string s;

    try {

      fin = new FileStream("test.txt", FileMode.Open);

    }

    catch(IOException exc) {

      Console.WriteLine("Ошибка открытия файла:" + exc.Message);

      return;

    }

    StreamReader fstr_in = new StreamReader(fin);

    try {

      while((s = fstr_in.ReadLine()) != null) {

        Console.WriteLine(s);

      }

    } catch(IOException exc) {

      Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);

    } finally {

      fstr_in.Close();

    }

  }

}

Обратите внимание на то, как в этой программе определяется конец файла. Когда метод ReadLine() возвращает пустую ссылку, это означает, что достигнут конец файла. Такой способ вполне работоспособен, но в классе StreamReader предоставляется еще одно средство для обнаружения конца потока — EndOfStream. Это доступное для чтения свойство имеет логическое значение true, когда достигается конец потока, в противном случае — логическое значение false. Следовательно, свойство EndOfStream можно использовать для отслеживания конца файла. В качестве примера ниже представлен другой способ организации цикла while для чтения из файла.

while(!fstr_in.EndOfStream) {

  s = fstr_in.ReadLine();

  Console.WriteLine(s);

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных