【问题标题】:copyfile function on Mac OS XMac OS X 上的复制文件功能
【发布时间】:2015-07-26 19:40:17
【问题描述】:

我正在开发一个将文件和文件夹从 a 点复制到 b 点的程序,这在大多数情况下非常简单。我决定使用copyfile 函数进行实际复制,因为它处理所有元数据。无论出于何种原因,它都无法复制许多文件,即使我以 root 身份运行它也是如此。无法复制的示例文件是/usr/share/emacs/22.1/etc/BABYL

我不知道为什么会这样。文件本身很好,我可以在 Finder 中找到它并像其他普通文件一样复制和粘贴它。是否有一些我遗漏的权限问题?它似乎只对系统文件执行此操作,但不是全部。它会和不会复制的内容是一致的。

实际的函数调用如下所示 copyfile(filePath, destPath, gState, COPYFILE_DATA | COPYFILE_ACL | COPYFILE_STAT | COPYFILE_XATTR); 我得到的错误不是很有用,只是 IO 错误 5。

我是否缺少某些东西导致它不适用于某些文件?还是 copyfile 不会做某些事情?有没有比 copyfile 更好的方法来复制文件及其所有属性/元数据?

请不要推荐其他复制文件的程序,这不是我来这里的目的。 谢谢!

【问题讨论】:

  • 在同一个文件上总是失败吗?如果这是您尝试复制的唯一文件,它会在该文件上失败吗?您确定在读取源或写入目标时不可能真的存在 I/O 错误吗?检查系统控制台日志以查看是否记录了任何实际的磁盘 I/O 错误。
  • 有841个文件无法复制,这是我尝试复制整个磁盘的时候。无法复制的内容是一致的。如果我进入控制台,则会出现错误消息,显示“app_name on open file_path input output error”。如果只是驱动器坏了,我可以理解这一点,但我可以在 Finder 中访问这些文件并复制/粘贴它们就好了,两个驱动器都通过了 SMART 测试,没有错误。
  • 你找到答案了吗?
  • 我问,因为我看到了相同的结果。

标签: c++ macos data-transfer file-copying


【解决方案1】:

你将不得不深入挖掘自己才能找到你的问题,幸运的是你可以挖掘 inside copyfile() 本身。 Apple 提供了full source,您可以将其链接到您的代码中,然后通过它进行跟踪以找到问题。

注意:您可能需要稍微调整源代码才能使其编译,但这样做很简单。但是,如果您尝试遇到困难,请提出另一个问题,详细说明您尝试过的操作以及出了什么问题,有人可能会帮助您。

HTH

【讨论】:

  • 谢谢,我会试试看是否能从中得到任何有用的错误。
  • 这是一个建议的方法,但并不是问题的真正答案。
  • @uchuugaka - 是的,因为无法知道实际问题是什么,但可以建议如何追踪它。如果您遇到相同的问题,您可以尝试相同的方法来发现问题。很好的狩猎!
  • 我实际上正在这样做。现在找出所有的makefile。
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多