我正在尝试使用system::error_code参数boost::filesystem::copy_file将文件复制到目的地,因为我不希望抛出异常。
该函数接受一个参数,如果同名文件已经存在,它是否会失败,这是我想要的行为。从http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html copy_file:
效果:If option == copy_option::fail_if_exists &&Exists (to),报错
然而,我找不到我应该期待的错误代码。这取决于底层操作系统吗?
是的,它依赖于底层操作系统。源代码显示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系统上的BOOST_ERRNO
为errno
。
在Posix上,O_CREAT
和O_EXCL
对open()
的底层调用将失败,并且当文件已经存在时将errno
设置为EEXIST
。