【问题标题】:copy symlink on macos using copyfile使用 copyfile 在 macOS 上复制符号链接
【发布时间】:2021-09-04 16:13:09
【问题描述】:

我在 macOS 上使用copyfile(sourceFilePath, targetFilePath, nullptr, COPYFILE_CLONE) 来复制符号链接(请参阅https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/copyfile.3.html)。我需要保留符号链接及其所有元数据。它对文件符号链接非常有效 - 它复制符号链接,结果是一个符号链接。但它不适用于目录符号链接(指向目录的符号链接)。它被复制,但结果不保存为符号链接,它是一个目录。我尝试添加标志COPYFILE_NOFOLLOW,但结果仍然相同。我究竟做错了什么?还有其他方法可以复制指向目录及其所有元数据的符号链接吗?

【问题讨论】:

  • 在 macOS 10.15 上尝试了一个示例,您的用例似乎有效。 COPYFILE_NOFOLLOW 似乎是多余的,因为 COPYFILE_CLONE 已经覆盖了 COPYFILE_NOFOLLOW_SRC。您使用的是哪个版本的 macOS?
  • macOS Catalina 10.15.7
  • 所以我发现了问题。这是路径中的尾部斜线。我应该得到减分。

标签: c++ c macos


【解决方案1】:

所以这个错误的原因很简单:路径字符串以斜杠结尾。我的程序将文件夹的符号链接视为文件夹并包含尾部斜杠。随后链接被复制为文件夹而不是链接。

copyfile("/Users/vlad/link_to_dir/", "/Users/vlad/copy_of_link_to_dir/", nullptr, COPYFILE_CLONE);

只需将链接复制为文件夹。将符号链接复制为符号链接的正确版本是:

copyfile("/Users/vlad/link_to_dir", "/Users/vlad/copy_of_link_to_dir", nullptr, COPYFILE_CLONE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2016-01-16
    • 1970-01-01
    • 2023-03-16
    • 2010-09-30
    • 2020-09-10
    • 2019-01-25
    • 2011-05-04
    相关资源
    最近更新 更多