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

C 使用unix函数在OSX下移动/复制文件,c,macos,file,unix,copy,C,Macos,File,Unix,Copy,我希望在Mac OS X下尽可能快地复制(或移动)文件,同时保持对复制过程的控制: -如果目标文件已经存在,可以询问是否存在(覆盖、跳过、重命名),即使它是复制目录的子目录。 -了解复制过程的进度(剩余时间、大小等) 感谢您的帮助学习如何做到这一点的一个好方法是查看开源项目的现有代码。rsync是一个工具,它可以执行您所说的所有检查(检查是否存在、进度等) 例如,如果您想了解如何将进度报告给用户,请检查源代码中它解析“-progress”参数的位置,查看结果涉及哪些函数,并尝试理解。在这种情况下

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


感谢您的帮助

学习如何做到这一点的一个好方法是查看开源项目的现有代码。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。 这可能不是对您问题的直接回答,但可能会让您走得更远:)


学习如何做到这一点的一个好方法是查看开源项目的现有代码。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。 这可能不是对您问题的直接回答,但可能会让您走得更远:)

啊,所以你可以使用Objective C方法。好极了

考虑一下。我已经为您链接了苹果的文档

查看该方法的“讨论”部分,它会告诉您如何处理覆盖和重命名(即,当抛出错误时,调用委托方法,您可以显示自己的“想要覆盖?”警报等)

此方法适用于10.6及更新版本。有一种较旧的方法可以用于较旧的OSX版本。如果您需要它,但找不到它的名称,请告诉我,我将编辑此答案以提供更多详细信息。

Ahh,因此您可以使用Objective C方法。好极了

考虑一下。我已经为您链接了苹果的文档

查看该方法的“讨论”部分,它会告诉您如何处理覆盖和重命名(即,当抛出错误时,调用委托方法,您可以显示自己的“想要覆盖?”警报等)



此方法适用于10.6及更新版本。有一种较旧的方法可以用于较旧的OSX版本。如果您需要它,但找不到它的名称,请告诉我,我将编辑此答案以提供更多详细信息。

此问题已进行了投票(我没有这样做)。这是一个编程问题还是命令行问题?我建议将此问题迁移到superuser.com。这是一个编程问题,而不是命令行问题。为什么要使用UN*X函数来解决此问题?我可以告诉您有关
system
NSTask
的信息,但如果您想跟踪进度并询问用户有关覆盖、跳过、重命名的信息,您确实需要使用本机MacOS调用来实现这一点。你用什么语言编写你的应用程序或命令行工具?你能更准确地说明你的问题是什么吗?文件处理?将进度连接到进度条?其他一些与用户界面相关的问题?@MichaelDautermann这是一个objective-c可可应用程序。我可以使用cocoa函数,但我没有发现任何能够要求覆盖和显示进度的函数。这个问题已经有了接近票数(我没有这样做)。这是一个编程问题还是命令行问题?我建议将此问题迁移到superuser.com。这是一个编程问题,而不是命令行问题。为什么要使用UN*X函数来解决此问题?我可以告诉您有关
system
NSTask
的信息,但如果您想跟踪进度并询问用户有关覆盖、跳过、重命名的信息,您确实需要使用本机MacOS调用来实现这一点。你用什么语言编写你的应用程序或命令行工具?你能更准确地说明你的问题是什么吗?文件处理?将进度连接到进度条?其他一些与用户界面相关的问题?@MichaelDautermann这是一个objective-c可可应用程序。我可以使用cocoa函数,但我找不到任何可以请求覆盖和显示进度的函数。如何使用此函数获取复制进度?在开始操作之前,计算要移动/复制的项目数,然后可以使用增量计数器移动窗口中的进度条或显示的视图。我想对一个大文件的副本进行同样的缩减,然后查看rsync的源代码。它做你想要的。真的,自己想一个方法来做这件事也不完全是火箭科学:-)如何使用此功能获得复制进度?在开始操作之前,计算要移动/复制的项目数,然后可以使用增量计数器移动窗口中的进度条或显示的视图。我也希望这样做一个大文件的副本。然后查看rsync的源代码。它做你想要的。事实上,自己想办法也不完全是火箭科学:——)