如何判断std::filesystem::remove_all调用是否失败?
结论
你的使用方式是正确的,该判断逻辑可以准确识别std::filesystem::remove_all的调用结果,确认所有文件是否成功删除。
具体说明
- 你的推理完全符合C++标准的规定:
std::filesystem的非抛出重载在调用成功时会自动调用ec.clear(),此时ec.value()为0;调用出错时会设置对应错误码,ec.value()为非0值,因此你用ec.value()非0判断失败的逻辑是完全成立的。 - 更简洁的推荐写法是直接判断
ec本身:std::error_code重载了显式bool转换运算符,if (ec)和if (ec.value() != 0)的判断结果完全一致,代码可读性更高。 - 额外补充:如果删除过程中遇到错误,
std::filesystem::remove_all会立即中止执行,已经删除的内容不会回滚,此时ec一定会被设置为错误值,你当前返回false的逻辑可以保证只有所有内容全部删除成功的场景才会通过校验。 - 若你的业务场景需要区分「目标路径原本就不存在」和「成功删除了完整目标路径」两种情况,可以额外获取
std::filesystem::remove_all的返回值(返回值为实际删除的文件/目录总数)做进一步判断,否则当前逻辑已经完全满足需求。
内容的提问来源于stack exchange,提问作者datguyray
相关产品推荐
相关产品推荐

