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

Invalid cross-device link error with boost filesystem

本文关键字:链接 错误 无效 文件系统 boost      更新时间:2023-10-16

我正试图使用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. 在呼叫std::systen时包裹mv ?

boost::filesystem中是否有其他功能可以实现我想要的功能?我自己找不到。

我正在使用g++和linux。

如果由于源文件和目标文件位于不同的文件系统上而重命名文件失败(最终通过rename()库调用,无论它是包装在boost::中还是其他任何东西中),那么唯一的选择是复制文件并在验证复制完成并成功后删除原始文件。这就是/bin/mv所做的-它首先尝试rename(),如果它的失败返回的错误代码表明跨设备链接的情况,它回落到复制和删除场景。