【发布时间】: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