【发布时间】:2009-01-29 14:31:38
【问题描述】:
我想知道,编写一个将文件从一个地方复制或移动到另一个地方的 OSX 程序是否有最佳实践?
- 我可以调用一些 NSSomething 方法吗?
- 我必须使用输入/输出流吗?
- 或者最好的方法是仅仅依靠向查找器传递命令?
额外问题:如何使用其中一种方法获得“复制完成 12%”的百分比?
感谢您的帮助!
【问题讨论】:
标签: objective-c macos file-io
我想知道,编写一个将文件从一个地方复制或移动到另一个地方的 OSX 程序是否有最佳实践?
额外问题:如何使用其中一种方法获得“复制完成 12%”的百分比?
感谢您的帮助!
【问题讨论】:
标签: objective-c macos file-io
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];
查看文档以获得对这两个类的更完整描述。 (NSFileManager, NSWorkspace)
【讨论】:
performFileOperation 在 10.11 中已弃用 :-(
recycleURLs
performFileOperation?
[[NSFileManager defaultManager] copyItemAtPath:srcPath toPath:dstPath error:&error]
这是类参考的链接:
【讨论】:
(NSError **)类型,建议[[NSFileManager defaultManager] copyItemAtPath:srcPath toPath:dstPath error:&error]带&号可能会更好。
您也可以使用FSCopyObjectAsync 函数。您可以显示文件复制进度,也可以使用 FSCopyObjectAsync() 取消文件复制。
看看这个post。
FSCopyObjectAsync 在 OS X v10.8 中已弃用
copyfile(3) 是 FSCopyObjectAsync 的替代方案。 Here 是带有进度回调的 copyfile(3) 示例。
【讨论】: