我正在尝试使用带有system :: error_code参数的boost :: filesystem :: copy_file将文件复制到目标,因为我不想抛出异常。
该函数接受一个参数,如果一个文件已经存在同名,那么它是否应该失败,这就是我想要的行为。来自http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#copy_file:
效果:如果选项== copy_option :: fail_if_exists&&存在(to),报告错误。
但是,我找不到我应该期待的错误代码。这取决于底层操作系统吗?
答案 0 :(得分:2)
是的,它取决于底层操作系统。源代码显示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()
指定Posix系统上的errors originating from the operating system和BOOST_ERRNO
为errno
。
在Posix上,open()
与O_CREAT
和O_EXCL
的基础调用将失败,并在文件已存在时将errno
设置为EEXIST
。