使用Objective-C复制或移动文件的最佳方法是什么?

时间:2009-01-29 14:31:39

标签: objective-c macos file-io

我想知道,编写一个将文件从一个地方复制或移动到另一个地方的OSX程序是否有最佳实践?

  • 我可以调用一些NSSomething方法吗?
  • 我是否必须使用输入/输出流?
  • 或者最好的方法是依靠将命令传递给finder?

奖金问题:如何使用其中一种方法获得“复制12%完成”的百分比?

感谢您的帮助!

3 个答案:

答案 0 :(得分:52)

NSFileManager和NSWorkspace都有移动,复制和删除文件的方法。通常你会使用NSFileManager,因为它更容易使用:

if ( [[NSFileManager defaultManager] isReadableFileAtPath:source] )
    [[NSFileManager defaultManager] copyItemAtURL:source toURL:destination error:nil];

但是,NSWorkspace可以轻松地将文件移动到垃圾箱,NSFileManager无法做到。

[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation source:foldername destination:@"" files:filenamesArray tag:&tag];

查看文档以获取有关这两个类的更完整描述。 (NSFileManagerNSWorkspace

答案 1 :(得分:13)

答案 2 :(得分:5)

您还可以使用FSCopyObjectAsync功能。您可以显示文件复制进度,也可以使用FSCopyObjectAsync()取消文件复制 看一下这个post

在OS X v10.8中不推荐使用FSCopyObjectAsync

copyfile(3)是FSCopyObjectAsync的替代方案。 Here是带有Progress Callback的copyfile(3)的示例。