c – 我应该从Boost :: filesystem :: copy中得到什么错误代码

我正在尝试使用带有system :: error_code参数的boost :: filesystem :: copy_file将文件复制到目标,因为我不想抛出异常.

该函数接受一个参数,如果一个文件已经存在同名,它是否应该失败,这是我想要的行为.从http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#copy_file开始:

Effects: If option == copy_option::fail_if_exists && exists(to), an error is reported.

但是,我找不到我应该期待的错误代码.这取决于底层操作系统吗?

最佳答案 是的,它取决于底层操作系统.源代码显示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()指定errors originating from the operating system,Posix系统上的BOOST_ERRNO为errno.

在Posix上,使用O_CREAT和O_EXCL对open()的底层调用将失败,并在文件已存在时将errno设置为EEXIST.

点赞