Пример 1.
Программа создает текстовый файл, в который записываются две строки.
Вторая строка формируется из преобразованных численных значений переменных
и поясняющего текста. Содержимое файла можно посмотреть в любом
текстовом редакторе. Файл создается в том же каталоге, куда среда записывает
исполняемый файл. По умолчанию это каталог...\ConsoleApplication1\bin\Debug.
Кроме того, необходимо добавлять оператор
using System.IO;
при работе с файлами.
// Текст программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace вывод_в_текстовый_файл
{
class Program
{
static void Main(string[] args)
{
try
{
StreamWriter f = new StreamWriter("text.txt");
f.WriteLine("Вывод в текстовый файл:");
double a = 12.234;
int b = 29;
f.WriteLine(" a = {0,6:C} b = {1,2:X}", a, b);
f.Close();
Console.WriteLine("Вывод успешен");
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
Console.ReadLine();
return;
}
}
}
}
Конструкция try …catch используется для отслеживания исключительных ситуаций (ошибок) при работе с файлом.
Исключительная ситуация (или исключение) — это ошибка, которая возникает во время выполнения программы. Используя С#-подсистему обработки исключи-
тельных ситуаций, с такими ошибками можно справляться. Эта подсистема в С#
включает в себя усовершенствованные методы, используемые в языках C++ и Java.
Поэтому эта тема будет знакомой для C++- и Java-программистов. Однако обработка
исключений в С# отличается ясностью и полнотой реализации.
Преимущество подсистемы обработки исключений состоит в автоматизации создания большей части кода, который ранее необходимо было вводить в программы
"вручную". Например, в любом компьютерном языке при отсутствии такой подсистемы практически каждый метод возвращал коды ошибок, и эти значения проверялись вручную при каждом вызове метода. Такой подход довольно утомителен, кроме того, при этом возможно возникновение ошибок. Обработка исключений упрощает "работу над ошибками", позволяя в программах определять блок кода, именуемый обработчиком исключении, который будет автоматически выполняться при возникновении опрделенной ошибки. В этом случае не обязательно проверять результат выполнения каждой конкретной операции или метода вручную. Если ошибка возникнет, ее должным образом обработает обработчик исключений.
Еще одним преимуществом обработки исключительных ситуаций в С# является
определение стандартных исключений для таких распространенных программных
ошибок, как деление на нуль или попадание вне диапазона определения индекса.
Чтобы отреагировать на возникновение таких ошибок, программа должна отслеживать
и обрабатывать эти исключения. Без знания возможностей С#-подсистемы обработки исключений успешное программирование на С# попросту невозможно.
Класс Exception
В С# исключения представляются классами. Все классы исключений должны быть выведены из встроенного класса исключений Exception, который является частью
пространства имен System. Таким образом, все исключения — подклассы класса
Exception.
Из класса Exception выведены классы SystemException и ApplicationException.
Они поддерживают две общие категории исключений, определенные в С#: те, которые
генерируются С#-системой динамического управления, или общеязыковым средством
управления (Common Language Runtime — CLR), и те, которые генерируются приклад-
ными программами. Но ни класс SystemException, ни класс ApplicationException не привносят ничего нового в дополнение к членам класса Exception. Они просто определяют вершины двух различных иерархий классов исключений.
Система С# определяет встроенные исключения, которые выводятся из класса SystemException. Например, при попытке выполнить деление на нуль генерируется
исключение класса DivideByZeroException. Как будет показано ниже в этой главе,
вы сможете создавать собственные классы исключений, выводя их из класса ApplicationException.
Управление С#-механизмом обработки исключений зиждется на четырех ключе-
вых словах: try, catch, throw и finally. Они образуют взаимосвязанную подсистему, в которой использование одного из них предполагает использование другого. В
Если кратко, то их работа состоит в следующем. Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try-блок. Если исключение таки возникает в этом блоке, оно дает знать о себе выбросом определенного рода информации. Это выброшенное исключение может быть перехвачено программным путем с помощью catch-блока и обработано соответствующим образом. Системные исключения автоматически генерируются
С#-системой динамического управления. Чтобы сгенерировать исключение вручную,
используется ключевое слово throw. Любой код, который должен быть обязательно
выполнен при выходе из try-блока, помещается в блок finally.