2014-03-25 52 views
1

副本是否有寫有NSFileWrapper主場迎戰同的NSFileManager

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:我想在後臺使用這些方法中的任何一種。

回答

1

要在後臺使用它,請使用NSThread在mainThread下創建(第二個或更多)線程。

我沒有使用NSFileWrapper,但與NSFileManager很多。要使用哪一個,取決於您希望應用程序使用文件/文件夾/鏈接的方式(以及方式)。

反正我對你有一些建議閱讀文檔後:

調頻工作與文件,文件夾,鏈接的文本路徑/ URL。使用FM複製應用程序(-file)時,它通常會失敗,因爲應用程序不是文件,而是特殊類型的文件夾=文件包,通常包含具有受限制的讀取或寫入權限的文件/文件夾。複製文件夾及其內容將導致此文件夾的更改日期發生更改,因爲該文件夾是先創建的,然後其內容已更改!也許你不想要這樣的改變。

FW可以與節點(可以看作是一種容器,包含有關文件系統中某個對象的信息和其他數據的容器)一起工作,屬於給定的路徑/ URL。一旦FW被創建,路徑可能會改變,但FW仍然可以訪問文件,文件夾,鏈接。它還節省了磁盤和時間上的空間,即如果複製的對象沒有改變,只在節點中硬鏈接,而不是真的再次複製整個文件。

寫入選項「NSFileWrapperWritingAtomic」可以確保文件包真正完全複製,而不是像FM一樣發生中斷的複製過程。然後你有一個不完整的文件包,不知道,當過程停止時。 我想(!),可以完全複製應用程序,獨立於所包含文件/文件夾的權限,或者可以臨時更改這些權限以完成任務。

+0

你能解釋一下更多的「硬鏈接」嗎?我很不清楚。謝謝。 – Colas

+0

UNIX中的硬鏈接是指向文件/不是目錄的鏈接。它使您可以在同一目錄或另一個目錄中爲文件指定第二個文件名,而無需複製或移動該文件,並且通過在UNIX中使用「ln」在目錄中添加條目來創建該文件。硬鏈接不能跨越文件系統邊界。新名稱可以是相對路徑名或絕對路徑名。 – macrene

相關問題