Обработка исключений при работе с файлами
Некоторые специализированные типы исключений-наследников класс Exception, которые могут быть использованы при работе с файлами:
· IOException: является базовым классом для исключений в пространстве имен System.IO, поэтому его нужно обрабатывать в блоке catch после обработки других исключений, связанных с вводом-выводом.
· UnauthorizedAccessException: возникает в случае запрета доступа операционной системой из-за ошибки ввода-вывода или особого типа ошибки безопасности.
· FileNotFoundException: выдается при попытке получить доступ к файлу или каталогу, которых нет на диске.
· DirectoryNotFoundException: создается, когда не удается найти часть файла или каталога.
· PathTooLongException: создается, когда путь или полное имя файла длиннее, чем максимальная длина, определенная системой.
· DriveNotFoundException: вызывается при попытке доступа к недоступному диску или данным совместного использования.
· NotSupportedException: путь не указан в допустимом формате
· OperationCanceledException: выдается в потоке при отмене операции, выполняемой этим потоком.
· SecurityException: возникает, когда вызывающий объект не имеет разрешений, необходимых для доступа к ресурсу.
· ArgumentException: выбрасывается, если один из передаваемых методу аргументов является недопустимым.
Например, если надо проверить, существует ли файл без использования метода File.Exists(), можно попробовать открыть файл в блоке try, а затем поймать исключение FileNotFoundException:
try
{
// Read in non-existent file.
using (StreamReader reader = new StreamReader("TextFile1.txt"))
{
reader.ReadToEnd();
}
}
catch (FileNotFoundException ex)
{
Console.WriteLine("The file don't exist!");
// Write error.
Console.WriteLine(ex.Message);
}
Или выбросить принудительно это исключение:
try
{
if (!File.Exists("FilePath"))
throw new FileNotFoundException();
}
catch (FileNotFoundException)
{
Console.WriteLine("The file is not found in the specified location");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Задание
1. Создать текстовый документ и ввести в несколько строк (не менее 5), соответствующих решению индивидуальной задачи по обработке строк из лабораторной работы №5. Файл сохранить в формате UTF-8 с заданным именем и расширением (см. табл. 10).
2. Модифицировать программу, разработанную при выполнении лабораторной работы №5 так, чтобы исходные строки для обработки считывались из текстового файла исходных данных, созданного при выполнении п.1 этого задания, а результаты обработки выводились в текстовый файл результатов с заданным именем и расширением (см. табл. 10). При этом должны иметь место следующие особенности:
чтение исходных данных из файла выполнять в методе Main().
запись результатов обработки в файл выполнять в пользовательской функции.
при выводе в файл следовать инструкции (см. табл. 10).
осуществление контроля исключительных ситуаций при работе с файлами.
3. Модифицировать блок-схемы алгоритмов для метода Main() и пользовательской функции.
4. Протестировать обработку контролируемых исключений.
5. В отчете привести:
индивидуальное задание на лабораторную работу №5;
модифицированные блок-схемы и листинг программы;
распечатки исходного файла и файла результатов;
результаты обработки исключений.
6. Сделать вывод по работе.
Таблица 10. Варианты индивидуальных заданий к лабораторной работе №6
№ вар. | Файл исх. данных | Файл результатов | Инструкция по выводу результатов в файл |
data.dat | lab6.txt | В конец файла с новой строки добавить общее количество преобразованных предложений. | |
lab6.dat | lab6.res | В начале файла в отдельной строке вывести заданный номер слова n. В конец файла результатов с новой строки добавить общее количество выделенных слов. | |
lab6.in | lab6.out | В файле результатов четырехзначное натуральное число выводить с новой строки, списки отделить друг от друга пустой строкой | |
lab6.d1 | lab6.d2 | В конец файла с новой строки добавить общее количество слов | |
lab6_in.txt | lab6_out.txt | В начале файла в отдельной строке вывести заданный номер слова n. Обработанные строки выводить сплошным текстом (без перехода на новую строку), разделяя их рассчитанным числовым показателем. | |
lab6_d.txt | lab6_r.txt | Диаграммы в файле результатов пронумеровать в соответствии с порядковыми номерами строк исходного файла. Номер выводить в отдельной строке перед диаграммой в следующем формате: Диаграмма для предложения #. | |
lab6.str | lab6.lft | Обнаруженные символы выводить сплошным, разделяя их соответствующим номером позиции. | |
lab6.str | lab6.rgh | В файле результатов в конце каждой обработанной строки добавить найденную разность количеств сделанных удалений и замен. | |
lab6_1.txt | lab6_2.txt | В начале файла в отдельной строке вывести заданный параметр n. В конец файла с новой строки добавить общее фактическое количество замен. | |
lab6.s1 | lab6.s2 | В начале файла в отдельной строке вывести заданный параметр n. Обработанные строки выводить сплошным текстом (без перехода на новую строку), разделяя их рассчитанным числовым показателем. | |
lab6d.s1 | lab6r.s2 | В файле результатов выделенные части строки разделить символом табуляции (\t). В начале файла в отдельной строке вывести заданный символ. | |
data.dat | lab6.txt | В файле результатов после каждой обработанной строки выводить в отдельной строке найденный индекс | |
lab6.dat | lab6.res | В файле результатов выводить исходную и обработанную строку, разделенную символом наклонной черты | |
lab6.in | lab6.out | В файле результатов выводить исходную и обработанную строки в двойных кавычках, разделенные символом «минус» | |
lab6.str | lab6.rgh | В файле результатов в конце каждой результатной строки через пробел вывести число перестановок слов | |
lab6_1.txt | lab6_2.txt | В файле результатов в конце каждой результатной строки через пробел вывести суммарное число удаленных символов | |
lab6d.s1 | lab6r.s2 | В файле результатов в конце каждой результатной строки через пробел вывести суммарное число звездочек, после чего через пробел выводить следующую строку | |
lab6.in | lab6.out | Перед каждой результатной строкой выводить количество замененных чисел | |
lab6.d1 | lab6.d2 | В файле результатов после каждой результатной строки выводить с новой строки число удаленных букв и число удаленных знаков препинания, разделенных символом косой черты | |
lab6_in.txt | lab6_out.txt | В начале файла в отдельной строке вывести через пробел заданную длину и заданный символ | |
lab6_d.txt | lab6_r.txt | В конце каждой результатной строки вывести число введенных пробелов | |
lab6.str | lab6.rgh | В начале каждой результатной строки вывести число введенных пробелов |
Дата добавления: 2021-12-14; просмотров: 335;