Нужно ли реализовывать исключение FileNotFoundError? - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть класс с именем TFile, и я не могу (не хочу) изменять его. Он не выдает исключение, если файл ввода / вывода не найден, но я могу проверить его статус, используя метод IsZombie. Теперь я реализовал очень простое исключение:

class FileNotFoundError : public std::runtime_error
{
public :

FileNotFoundError(const std::string & file_name="") 
: runtime_error("cannot find file " + file_name), filename(file_name) {}; 
string filename;
~FileNotFoundError() throw() {};
};

и я использую его как:

f = new TFile(total.c_str(), "RECREATE") ;
if (f->IsZombie())
{
    throw FileNotFoundError(total);
}

Есть ли лучший способ реализовать это исключение, я имею в виду: полезно ли выбрасывать стандартное исключение как ifstream::failure вместо моего пользовательского исключения?

1 Ответ

2 голосов
/ 07 декабря 2010

Нет стандартного исключения, которое дает вам очень избирательный способ отловить условие ошибки «файл не найден».Так что, да, если вы хотите сигнализировать об этом условии с исключением, и вы хотите позволить клиентскому коду делать что-то значимое, вам нужно создать собственный класс для этого.

Однако есть и причинаэто исключение еще не существует, хотя на сегодняшний день оно является наиболее распространенным несчастным случаем.Это нормально, что файла нет, когда вы ожидаете, что он будет.Ваша программа не контролирует файловую систему.Или, может быть, пользователь неправильно ввел имя файла, что-то в этом роде.Не исключено, что это идет не так.Не используйте исключения для неисключительных случаев.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...