std::filesystem::copy_file
的简单版本具有以下签名:
bool copy_file(const path& from, const path& to);
返回值描述为:
如果已复制文件,则为true,否则为false。
通常这很有意义,并且您希望使用if来包装调用,并在操作失败时报告错误,例如:
if (!fs::copy_file(inputImage, outputImage))
{
LOG(error) << "Failed to copy file:" << inputImage << " ==> " << outputImage;
}
但是,如果您查看有关例外情况的文档:
不带std :: error_code&参数的重载会在底层OS API错误上引发filesystem_error,该错误由from作为第一个路径参数,to作为第二个路径参数,以及OS错误代码作为错误代码参数构造。
这使我想到一个问题:如果权限不足,文件锁定和其他文件系统错误等故障导致异常,那么简单的copy_file
会在什么情况下返回false
?
答案 0 :(得分:3)
原因是copy_file(a,b)
只是copy_file(a,b,copy_options::none)
的重载,它将始终返回true
或引发异常。但是当您使用copy_file(a,b,copy_options::skip_existing)
时,您也可以毫无例外地收到有效的false
,因此您知道目标文件已经存在。
答案 1 :(得分:1)
您有两种方法来处理filesystem
中的错误。这基本上是从boost继承的。您可以将错误放入该error_code
引用中,也可以从异常中排除错误。
基本上,保证有参数的版本不会抛出错误,而没有参数的版本则会出错。如果您不关心引起问题的特定错误,则布尔返回值可简化此操作。 error_code
(无论是引发还是包含在参数中)为您提供了更多详细信息。
因此,回答您的问题:
error_code
参数中获取。请记住,这可能与系统有关。