【问题标题】:What error codes should I expect from Boost::filesystem::copy我应该从 Boost::filesystem::copy 中得到什么错误代码
【发布时间】:2014-05-27 20:51:46
【问题描述】:

我正在尝试使用 boost::filesystem::copy_file 和 system::error_code 参数将文件复制到目标,因为我不希望抛出异常。

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

效果:如果option == copy_option::fail_if_exists && exists(to),则报错。

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

【问题讨论】:

  • 我认为这取决于操作系统和文件系统。
  • How to use error_code(很复杂)
  • 你至少可以使用 system::error_code::operator !检查是否检测到错误。根据您的用例,这可能就足够了。 (至少对我来说)

标签: c++ boost errno boost-filesystem


【解决方案1】:

是的,它取决于底层操作系统。源代码显示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 systemBOOST_ERRNO 在 Posix 系统上是 errno

在 Posix 上,使用 O_CREATO_EXCLopen() 的底层调用将失败,并在文件已存在时将 errno 设置为 EEXIST

【讨论】:

    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多