fopen
нужно много чего сделать и проверить перед открытием файла. ENOENT
означает , что файл не существует, но файл не существует не означает ENOENT
.
Возможно, что файл не существует, и вы можете получить другую ошибку, например, EACCES
за невозможность прочитать родительский каталог, например.
С другой стороны, ENOENT
из fopen
не означает, что какой-то другой процесс не мог создать файл даже до того, как fopen
вернется, или до того, как вы проверите errno
и т. Д .; По этой причине C11 добавил флаг x
для открытия файла для записи в монопольном режиме - сбой, если файл уже существует.
Подводя итог: если вы получили ENOENT
, файл не существовал, когда вы пытались открыть его. Если вы получите какую-то другую ошибку, то каждый другой код ошибки будет принадлежать одному из 3-х этих классов - то есть наверняка, что либо
- файл существовал или
- это не может существовать
- или он мог существовать в то время
на момент открытия. Вам и вашей требуемой логике решать, как вы будете обрабатывать эти другие ошибки. Простой способ - отказаться от продолжения обработки, сообщив об ошибке пользователю.