使用unix函数在OSX下移动/复制文件

时间:2011-11-25 11:54:30

标签: c macos file unix copy

我想尽可能快地复制(或移动)Mac OS X下的文件,同时保持对复制过程的控制: - 如果目标文件已存在,则可以询问(覆盖,跳过,重命名),即使它是复制目录的子目录。 - 有复制过程的进度(剩余时间,大小......)

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

学习如何执行此操作的好方法是查看开源项目的现有代码。我想到的一个工具可以完成您正在讨论的所有检查(检查是否存在,进度等)是rsync。

例如,如果您想学习如何向用户报告进度,请检查源解析“--progress”参数的位置,查看由此调用的函数,并尝试了解。在这种情况下,您将最终进入progress.c,其中文件的内容是具有以下定义的函数

/**
 * @param ofs Current position in file
 * @param size Total size of file
 * @param is_last True if this is the last time progress will be
 * printed for this file, so we should output a newline.  (Not
 * necessarily the same as all bytes being received.)
 **/
static void rprint_progress(OFF_T ofs, OFF_T size, struct timeval *now,
                int is_last)

普通C,可在各种操作系统中移植 - 而不仅仅是OS X. 这可能不是你问题的直接答案,但可能会让你更进一步:)

Source code for rsync

答案 1 :(得分:1)

啊,所以你 可以 使用Objective C方法。古迪!

考虑[[NSFileManager defaultFileManager] copyItemAtURL:toURL:error:]。我已经为您链接了Apple的文档。

看看&#34;讨论&#34;该方法的部分,它告诉你如何处理覆盖和重命名(即抛出错误时,调用委托方法,你可以调出自己的&#34;想要覆盖?&#34;警报等)。< / p>

此方法适用于10.6&amp;新。这是一种较旧的方法,适用于较旧的OSX版本。如果您需要它并且无法找到它的名称,请告诉我,我将编辑此答案以提供更多详细信息。