So now you have two different error paths, one in which the file can't be accessed, and one in which the file can be accessed but the contents are corrupted? The developer must handle exceptions
and they must still check if the function returned some sentinel error value?
What's the point of forcing two different error paths on the developer?