使用以下代码将文件从一个目录复制到另一个目录
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
应该保证内核已经将所有写操作传递给了设备。从那时起,你就依赖硬件了。