【问题标题】:Best way to copy or move files with Objective-C?使用 Objective-C 复制或移动文件的最佳方法?
【发布时间】:2009-01-29 14:31:38
【问题描述】:

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

  • 我可以调用一些 NSSomething 方法吗?
  • 我必须使用输入/输出流吗?
  • 或者最好的方法是仅仅依靠向查找器传递命令?

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

感谢您的帮助!

【问题讨论】:

    标签: objective-c macos file-io


    【解决方案1】:

    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)

    【讨论】:

    【解决方案2】:

    【讨论】:

    • 由于error参数采用(NSError **)类型,建议[[NSFileManager defaultManager] copyItemAtPath:srcPath toPath:dstPath error:&error]带&号可能会更好。
    【解决方案3】:

    您也可以使用FSCopyObjectAsync 函数。您可以显示文件复制进度,也可以使用 FSCopyObjectAsync() 取消文件复制。
    看看这个post

    FSCopyObjectAsync 在 OS X v10.8 中已弃用

    copyfile(3) 是 FSCopyObjectAsync 的替代方案。 Here 是带有进度回调的 copyfile(3) 示例。

    【讨论】:

    • 我很高兴你在我问这个问题将近 3 年后才回答这个问题。它现在可能也比其他答案更正确。
    • 虽然在 10.8 中已弃用。请改用 URL copyItemAtURL。
    • 你可以使用copyfile(3)
    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多