【问题标题】:Invalid cross-device link error with boost filesystem使用 boost 文件系统的无效跨设备链接错误
【发布时间】:2014-08-04 06:47:06
【问题描述】:

我正在尝试使用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。

【问题讨论】:

  • 选项 1 是 /bin/mvrename() 的初始尝试失败时所做的...
  • 非常感谢。如果您在回答中坚持回答,我会将其标记为正确的。
  • 这也发生在 Python os.rename()

标签: c++ linux boost-filesystem


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多