1

有没有区别

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:我想在后台使用这些方法中的任何一种。

4

1 回答 1

1

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

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

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

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

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

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

于 2014-03-26T15:55:00.240 回答