This supports two common use cases:
Uses where file system errors are truly exceptional
and indicate a serious failure.
Throwing an exception is an appropriate response.
Uses where file system errors are routine
and do not necessarily represent failure.
Returning an error code is the most appropriate response.
This allows application specific error handling, including simply ignoring the error.
— end note