You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:06:04