Функции библиотеки файловой системы часто предоставляют две перегрузки: одна генерирует исключение для сообщения об ошибках файловой системы, а другая устанавливает файл error_code. [ Note: Это поддерживает два распространенных варианта использования:
Используется там, где ошибки файловой системы действительно исключительны и указывают на серьезный сбой. Выброс исключения - это подходящий ответ.
Используется там, где ошибки файловой системы являются обычными и не обязательно означают сбой. Наиболее подходящим ответом является возврат кода ошибки. Это позволяет обрабатывать ошибки приложения, в том числе просто игнорировать ошибку.
— end note ]
Функции, не имеющие аргумента типа, error_code& обрабатывают ошибки следующим образом, если не указано иное:
Когда вызов реализацией операционной системы или другого базового API приводит к ошибке, которая не позволяет функции соответствовать ее спецификациям,filesystem_error должно быть выброшено исключение типа . Для функций с одним аргументом пути этот аргумент должен быть передан filesystem_error конструктору с одним аргументом пути. Для функций с двумя аргументами пути первый из этих аргументов должен быть передан filesystem_error конструктору как path1 аргумент, а второй должен быть передан как path2 аргумент. В filesystem_error конструкторском error_code аргумент устанавливается в зависимости от обстоятельств зависимой ошибки конкретной операционной системы.
О невозможности выделить хранилище сообщается путем выдачи исключения, как описано в [res.on.exception.handling].
Деструкторы ничего не выкидывают.
Функции, имеющие аргумент типа, error_code& обрабатывают ошибки следующим образом, если не указано иное:
Если вызов реализацией операционной системы или другого базового API приводит к ошибке, которая не позволяет функции соответствовать ее спецификациям, error_code& аргумент устанавливается в соответствии с конкретной зависимой от операционной системы ошибкой. В противном случае clear() вызывается error_code& аргумент.