c++ - 如何检查 std::filesystem::copy 是否结束?
问题描述
使用此代码将文件复制到一个目录到另一个目录
auto const copyOption = std::filesystem::copy_options::recursive | std::filesystem::copy_options::skip_symlinks;
std::filesystem::copy("/mnt/iso", "/mnt/usb", copyOption);
复制大文件可能需要很长时间。那么如何检查副本何时结束?
解决方案
如何检查 std::filesystem::copy 是否结束?
对函数的调用以(1)返回、(2)抛出或(3)终止程序结束。
如果程序的执行继续到下一条语句(或下一个同级表达式),那么您知道函数调用已通过 (1) 返回而结束。如果执行继续展开并最终进入一个catch
块,那么您知道该函数已通过 (2) 抛出结束。如果程序不再运行,那么您知道该函数 (3) 终止了程序(std::filesystem::copy
不会直接执行此操作,尽管如果它在没有被捕获的情况下抛出它可能会发生)。如果这些都没有发生,那么你知道函数调用还没有结束。
例如,如果您有大文件,则在复制完成后尝试卸载 usbkey 将花费一两分钟的时间
C++ 中没有标准的方法来验证数据何时被物理写入设备。
您已标记 [ubuntu],因此您可能对fsync
POSIX 标准中的函数感兴趣。您不能将它与std::filesystem::copy
; 结合使用。您需要改用其他 POSIX 文件操作函数。fsync
应保证内核已将任何写入传递给设备。从那时起,您将依赖硬件。
推荐阅读
- c# - 检查 FirstChanceExceptionEventArgs 是否被 try and catch 处理
- java - 打印/计算未排序数组中所有具有相等总和的不同对
- wordpress - wordpress taxonomy_exists() 和 post_type_exists() - 返回 false
- c# - 路径 GetFileName 交换 / 与 \
- javascript - 在每次按键时更新隐藏字段值
- python - 在 python 中导入 csv 的 MacOS Mojave 路径问题
- r - 使用均值计算最有可能
- tensorflow - 您必须使用 dtype float 和 shape [?,3] 为占位符张量“X_1”提供一个值
- javascript - 如何检查哪种类型的元素行包含选择或输入?
- jquery - 通过jquery选择第二类元素