gpt4 book ai didi

c++ - boost::copy_file copy_option 跳过现有目标文件?

转载 作者:行者123 更新时间:2023-11-30 04:33:38 25 4
gpt4 key购买 nike

我想将一个文件复制到另一个文件,我想使用 Boost::copy_file。它有一个名为 copy_option 的参数,可以是:

  BOOST_SCOPED_ENUM_START(copy_option)
{none, fail_if_exists = none, overwrite_if_exists};
BOOST_SCOPED_ENUM_END

我在这里发现了另一个关于 overwrite_if_exists 行为的问题:how to perform boost::filesystem copy_file with overwrite

但是我的问题是我不知道如何使用 fail_if_exists = none 选项。如果目标文件已经存在,我想跳过复制操作。

我知道 if ( !exists(path) ) 是可行的,但我想了解 copy_option 是如何工作的。

如何在 Boost::copy_file 函数中使用 fail_if_exists = none

更新:更正了代码,the one on boost doc website有点坏了。

最佳答案

如果目标已经存在,则没有copy_option 来跳过复制。

但是 if (!exists(path)) copy_file(...) 也不是正确的答案,因为竞争条件:文件可能在您执行存在检查和尝试复制的时间。因此,即使您检查文件是否存在,copy_file 也可能会失败。

合成你想要的东西的方法是捕获错误并自己忽略它。像这样:

try {
copy_file(...);
}
catch (const boost::system::system_error &err) {
if (!err.code().equivalent(boost::system::errc::file_exists))
throw;
}

关于c++ - boost::copy_file copy_option 跳过现有目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com