【问题标题】:Write with NSFileWrapper vs. copy with NSFileManager使用 NSFileWrapper 写入与使用 NSFileManager 复制
【发布时间】:2014-05-03 06:01:35
【问题描述】:

有没有区别

NSURL *referenceURL, *destinationURL ;

[[[NSFileManager alloc] init] copyItemAtURL:referenceURL
                                      toURL:destinationURL
                                      error:NULL] ;

NSURL *referenceURL, *destinationURL ;
NSFileWrapperWritingOptions options ;

NSFileWrapper * fileWrapper = [[NSFileWrapper alloc] initWithURL:referenceURL
                                                         options:0
                                                           error:NULL] ;
[fileWrapper writeToURL:destinationURL
                options:options
    originalContentsURL:nil
                  error:NULL] ;

(尤其是,取决于选项的值;这里的选项的最佳选择是什么?)?

我问这个问题是为了更好地理解 NSFileWrapper。我看到我可以在我的代码中选择使用其中一个。我想答案可能涉及对“硬链接”的考虑。

PS:我想在后台使用这些方法中的任何一种。

【问题讨论】:

    标签: cocoa-touch file cocoa nsfilemanager nsfilewrapper


    【解决方案1】:

    为了在后台使用它,使用 NSThread 在 mainThread 下创建一个(第二个或更多)线程。

    我没有使用过 NSFileWrapper,但使用过很多 NSFileManager。使用哪一个取决于您希望应用处理文件/文件夹/链接的内容(以及方式)。

    无论如何,我在阅读文档后对您有一些建议:

    FM 使用文件、文件夹、链接的文本路径/URL。使用 FM 复制应用程序(-文件)时,通常会失败,因为应用程序不是文件,而是一种特殊类型的文件夹 = 文件包,其中通常包含读写权限受限的文件/文件夹。复制文件夹及其内容会导致该文件夹的更改日期发生变化,因为文件夹是先创建的,然后其内容会更改!也许你不想要这种改变。

    固件与属于给定路径/URL 的节点(可以被视为一种容器,其中包含有关文件系统中对象的信息和其他数据)一起使用。创建 FW 后,路径可能会更改,但 FW 仍然可以访问文件、文件夹、链接。它还可以节省磁盘空间和时间,如果一个没有更改的复制对象只是硬链接在一个节点中,而不是真正再次复制整个文件。

    写入选项“NSFileWrapperWritingAtomic”确保文件包真正被完全复制,而不是像 FM 那样发生中断的复制过程。然后你有一个不完整的文件包,不知道进程何时停止。 我猜(!),可以完全复制应用程序,独立于所包含文件/文件夹的读写权限,或者可以临时更改这些权限以完成任务。

    【讨论】:

    • 你能解释更多关于“硬链接”的事情吗?这对我来说很不清楚。谢谢。
    • UNIX 中的硬链接是指向文件/而不是目录的链接。它使您能够在同一目录或另一个目录中为文件指定第二个文件名,而无需复制或移动文件,它是通过在目录中添加条目来创建的,在 UNIX 中使用“ln”。硬链接不能跨越文件系统边界。新名称可以是相对路径名或绝对路径名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2014-11-20
    相关资源
    最近更新 更多