复制期间应传输哪些文件头数据?

时间:2013-03-23 00:59:45

标签: objective-c cocoa

我正在为MacOS上的文件的字节副本执行一个字节,因此我丢失了有关该文件的所有文件头数据(即LastModified,CreateDate等)。

我不想使用copyItemAtURL,因为它不会给我我需要的细粒度控件,特别是允许取消副本,进度更新,暂停能力等等。但我想模仿copyItemAtURL与文件头数据有关 - 我只是不知道究竟是什么。

我知道如何覆盖基础知识,从源文件中获取NSURLContentModificationDateKey,NSURLCreationDateKey,并将其应用于目标文件。

我的问题是:我还应该确保从原始文件转移到新文件?标签?安全信息?

非常感谢任何建议!

修改

我确实在apple docs here中找到了一些关于元数据的一般指导,但它并没有真正说明应该在什么条件下填充哪些元数据。

1 个答案:

答案 0 :(得分:2)

旧的基于Carbon的文件管理器中的FSCopyObjectAsync API曾经支持这种情况,不幸的是,从OS X 10.8(又名Mountain Lion)开始,它已被弃用。

FSCopyObjectAsync的文档将读者引导至copyItemAtURL:toURL:error或POSIX copyfile函数。后者似乎提供了你正在寻找的控制。

注意:我对copyfile()没有任何个人熟悉; YMMV。

一般来说,采用专门为复制文件而提供的更高级别的API将比使用更低级别的原语滚动自己更好。它们不仅会大大减少您必须编写的代码量;他们还将面向未来的应用程序,因为在未来的某些操作系统版本中添加到文件系统的任何内容都很可能会被自动支持。

为了完整起见,这里有一篇文章(书面预先弃用),解释了如何使用FSCopyObjectAsync执行file-copy-with-progress-indicator