Tim
Tim

Reputation: 1017

What's the cleanest way to fail gracefully when a file can't be opened in C++?

The program requires the file to run, but if for any myriad number of reasons it can't be found or isn't readable, etc - what's the cleanest way to fail out of the program?

Upvotes: 4

Views: 345

Answers (4)

Amir Zadeh
Amir Zadeh

Reputation: 3639

I'm thinking of these three steps:

First: print out the name of the file with a suitable error message.

Second: clean up the resources which your program has taken. free memory, close pipes, close sockets, delete temporary files, release mutexes ... .

Third: Terminate using exit().

Upvotes: 0

Peter G.
Peter G.

Reputation: 15144

Fail as you would fail in other cases:

  • A command line program would output the unreadable file (full path) and the exact reason for not being able to read it on Stderr and exit with an error code. The functions strerror() and perror() help you in verbalizing the failure reason.
  • A Gui would post an error message like the one above and exit after acknowledgement.

Upvotes: 7

zwol
zwol

Reputation: 140856

This type of error message should always include:

  • the name by which the program tried to open the file
  • the result of strerror(errno) on Unix, or the rather more convoluted Windows equivalent.

Upvotes: 1

Péter Török
Péter Török

Reputation: 116306

If the file is required, and a missing file is abnormal, I would throw an exception. That would then be handled on a higher level, where it is possible to decide what to do about the problem. If the app absolutely can't run without the file in question, I would just terminate it gracefully with an appropriate error message to show the exact problem to its users.

And of course, I would strive to check early for this file, before allocating other resources. This way there is less unnecessary stuff done, and less unused resources to free upon abnormal termination.

Upvotes: 4

Related Questions