Я пытаюсь скопировать файл в место назначения, используя boost :: filesystem :: copy_file с параметром system :: error_code, так как я не хочу генерировать исключения.
Эта функция принимает параметр, должен ли он произойти сбой, если файл с таким именем уже существует, и это именно то поведение, которое мне нужно. От http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#copy_file:
Эффекты: Если опция == copy_option :: fail_if_exists && существует (до), сообщается об ошибке.
Однако я не могу найти, какие коды ошибок мне следует ожидать. Это зависит от базовой ОС?
Да, это зависит от базовой ОС. Исходный код показывает, что copy_file()
(и другие операции) генерирует такие ошибки:
if (ec == 0)
BOOST_FILESYSTEM_THROW(filesystem_error(message,
p, error_code(BOOST_ERRNO, system_category())));
else
ec->assign(BOOST_ERRNO, system_category());
system_category()
определяет ошибки, возникающие в операционной системе а также BOOST_ERRNO
в системах Posix есть errno
.
На Posix основной вызов open()
с O_CREAT
а также O_EXCL
потерпит неудачу и установит errno
в EEXIST
когда файл уже существует.