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

时间:2014-06-13 16:26:09

标签: 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)

我明白问题在于我正在尝试将文件从一个文件夹移动到另一个文件夹中安装的另一个文件夹。

有没有与

不同的解决方案
  1. 复制文件然后删除它(它给我一些安全感)。
  2. mv打包到std::systen的来电中?
  3. boost::filesystem中是否还有其他功能可用于实现目标?我自己找不到。

    我正在使用g ++和linux。

1 个答案:

答案 0 :(得分:17)

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