2013-03-23 31 views
0

我正在爲MacOS上的文件的字節拷貝做一個字節,因此我將丟失關於該文件的所有文件頭數據(即LastModified,CreateDate等)。拷貝過程中應該傳送什麼文件頭數據?

我不想使用copyItemAtURL,因爲它沒有給我我需要的細粒度控件,特別是允許取消複製,進度更新,暫停等等。但是我想要模仿什麼copyItemAtURL處理文件頭數據 - 我只是不知道這是什麼。

我知道如何獲得基礎知識,從源文件抓取NSURLContentModificationDateKey,NSURLCreationDateKey並將其應用到目標文件。

我的問題是:還有什麼我應該確保從原始文件轉移到新文件?標籤?安全信息?

任何建議非常感謝!

編輯

我發現在蘋果文檔here有關的元數據的一般指導,但它並沒有真正叫出它的元數據應該什麼條件下進行填充。

+0

文件可以有任何數量的屬性和其他元數據,你需要什麼「罰款粒度控制」? – 2013-03-23 01:09:22

+0

我需要能夠暫停/恢復/取消,更新進度等字節的字節。這對於大文件尤其重要。 – 2013-03-23 04:30:58

回答

2

舊版本的基於碳文件管理器中的FSCopyObjectAsync API支持這種API,但不幸的是,從OS X 10.8(又名Mountain Lion)開始不推薦使用該API。

爲FSCopyObjectAsync的文檔引導讀者要麼copyItemAtURL:toURL:error或POSIX copyfile功能。後者似乎提供了你正在尋找的控制。

注:我沒有任何個人熟悉copyfile();因人而異。

一般來說,採用專門爲複製文件而提供的更高級別的API,將比使用底層基元自己滾動更好。它們不僅會大大減少你編寫的代碼量,他們也將對您的應用程序進行面向未來的測試,因爲在未來的某個OS版本中添加到文件系統的任何內容都很可能會自動得到支持。

爲了完整起見,下面是一篇文章(寫入預先棄用),說明如何使用FSCopyObjectAsync執行file-copy-with-progress-indicator

+0

同意,更高的水平是更好的,如果它的工作。我過去一直在使用copyItemAtURL,但對於阻止並且不容易取消的GB +大小的文件來說,這似乎並不合理。據我所知,FSCopyObjectAsync完全可以工作,但不可用,因爲它們已被棄用,並且對AppStore中已棄用的代碼存在限制。複製文件()看起來有點令人生畏...搖滾,遇到困難的地方。 – 2013-03-23 04:24:32