如何检查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],所以你可能对POSIX标准中的fsync函数感兴趣。不能与std::filesystem::copy连用;您将需要使用其他POSIX文件操作函数。fsync应该保证内核已经将所有写操作传递给了设备。从那时起,你就依赖硬件了。

相关内容

  • 没有找到相关文章

最新更新