与boost文件系统无关的跨设备链接错误

Abr*_*ile 11 c++ linux boost-filesystem

我正在尝试使用一个文件从一个位置移动到另一个位置boost::filesystem.我使用了boost::filesystem::rename函数但是当我尝试这样做时,我有以下错误.

terminate called after throwing an instance of 
'boost::filesystem::filesystem_error'
what():  boost::filesystem::rename: Invalid cross-device link: 
"./file_A.csv",    "/opt/data/file_B.csv"
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)

我明白问题是我试图将文件从一个文件夹移动到另一个文件夹上安装的另一个文件夹.

有什么不同的解决方案吗?

  1. 复制文件然后删除它(它给我一些安全感).
  2. 包裹mv在一个呼叫std::systen

boost::filesystem对于我想要实现的目标,还有其他功能吗?我自己找不到.

我正在使用g ++和linux.

twa*_*erg 17

如果重命名文件(最终通过rename()库调用,无论是否被包装boost::或其他任何内容)都失败,因为源和目标位于不同的文件系统上,唯一的选择是在验证副本后复制文件并删除原始文件完成并取得了成功.这就是/bin/mv- 它首先尝试a rename(),如果它的失败返回的错误代码表明跨设备链接情况,它将回退到复制和删除方案.