Еслипопытка открыть файл оказывается неудачной, то генерируется исключение. Если же файл нельзя открыть из-за того что он не существует, генерируется исключениеFileNotFoundException.А если файл нельзя открыть из-за какой-нибудь ошибки ввода-вывода, то генерируется исключениеIOException.К числу других исключений, которые могут быть сгенерированы при открытии файла, относятся следующие:ArgumentNullException(указано пустое имя файла),ArgumentException(указано неверное имя файла),ArgumentOutOfRangeException(указан неверный режим),SeaurityException(у пользователя нет прав доступа к файлу),PathTooLongException(слишком длинное имя файла или путь к нему),NotSupportedException(в имени файла указано устройство, которое не поддерживается), а такжеDirectoryNotFoundException(указан неверный каталог).
ИсключенияPathTooLongException, DirectoryNotFoundExceptionиFileNotFoundExceptionотносятся к подклассам класса исключенийIOException.Поэтому все они могут быть перехвачены, если перехватывается исключениеIOException.
Ниже в качестве примера приведен один из способов открытия файлаtest. datдля ввода.
FileStream fin;
try {
fin = new FileStream("test", FileMode.Open);
}
catch(IOException exc) { // перехватить все исключения, связанные с вводом-выводом Console.WriteLine(exc.Message);
// Обработать ошибку.
}
catch(Exception exc { // перехватить любое другое исключение.
Console.WriteLine(exc.Message);
// Обработать ошибку, если это возможно.
// Еще раз сгенерировать необрабатываемые исключения.
}
В первом блоке catch из данного примера обрабатываются ошибки, возникающие в том случае, если файл не найден, путь к нему слишком длинен, каталог не существует, а также другие ошибки ввода-вывода. Во втором блоке catch, который является "универсальным" для всех остальных типов исключений, обрабатываются другие вероятные ошибки (возможно, даже путем повторного генерирования исключения). Кроме того, каждую ошибку можно проверять отдельно, уведомляя более подробно о ней и принимая конкретные меры по ее исправлению.