如何判断std::filesystem::copy函数的执行是否已完成?
判断std::filesystem::copy拷贝操作结束的方法
- 同步调用场景直接判断函数返回
std::filesystem::copy是同步阻塞函数,调用后会阻塞当前线程,直到所有文件拷贝完成或触发错误才会返回,不需要额外做结束判断。你可以在函数调用后直接追加拷贝完成后的逻辑,配合错误处理即可确认执行结果:
#include <filesystem> #include <system_error> namespace fs = std::filesystem; std::error_code ec; auto const copyOption = fs::copy_options::recursive | fs::copy_options::skip_symlinks; // 传入error_code避免异常抛出 fs::copy("/mnt/iso", "/mnt/usb", copyOption, ec); if (!ec) { // 走到这里就代表拷贝操作正常结束 } else { // 拷贝出错,可通过ec获取错误信息 }
- 异步非阻塞场景的结束判断
如果你不想阻塞当前线程,可以把拷贝逻辑放到独立线程中执行,通过std::future等同步工具判断执行状态:
#include <filesystem> #include <system_error> #include <future> namespace fs = std::filesystem; // 启动异步拷贝任务 auto copyFuture = std::async(std::launch::async, []() -> std::error_code { std::error_code ec; auto const copyOption = fs::copy_options::recursive | fs::copy_options::skip_symlinks; fs::copy("/mnt/iso", "/mnt/usb", copyOption, ec); return ec; }); // 此处可执行其他和拷贝无关的业务逻辑 // ... // 需要确认拷贝状态时调用wait等待任务结束 copyFuture.wait(); auto ec = copyFuture.get(); if (!ec) { // 异步拷贝正常结束 }
- 需要实时进度的场景
原生std::filesystem::copy没有提供进度回调接口,如果你需要实时掌握拷贝进度,可以自行遍历源目录统计总文件/总大小,逐个调用fs::copy_file完成拷贝,每完成一个文件就更新进度,所有文件处理完成即代表整体拷贝结束。
内容的提问来源于stack exchange,提问作者kramer
相关产品推荐
相关产品推荐

