Implement exception handling

Your code catches an IOException when a file cannot be accessed. You want to give more information to the caller of your code. What do you do?

Use throw to rethrow the exception and save the call stack.
Throw a new exception with extra information that has the IOException as InnerException.
Change the message of the exception and rethrow the exception.
Throw a new exception with more detailed info.