2013-03-03 96 views
1

我有iOS應用程序。文檔目錄中有一些文件。我需要檢查這些文件是否被編輯或替換。什麼是正確的方法來做到這一點?我應該對文件進行散列還是上次編輯的時間(如何在iOS中獲得這個時間),還是有更好的方法來實現它?檢查文件是否更新

+5

你一定要檢查它的更新時間。 繼續保存更新的時間給一些plist並檢查它。 – 2013-03-03 18:45:24

+0

除了應用程序之外,誰還可以在運行時編輯/替換'Documents'目錄中的文件...? – holex 2013-03-03 18:45:29

+1

itunes同步,你可以添加一些文件到documets目錄從itunes – 2013-03-03 18:47:26

回答

4

您可以使用此代碼來獲取文件的修改日期:

NSFileManager* fileManager = [NSFileManager defaultManager]; 
NSDictionary* attributes = [fileManager attributesOfItemAtPath:path error:nil]; 

if (attributes != nil) { 
    NSDate *date = (NSDate*)[attributes objectForKey:NSFileModificationDate]; 
    NSLog(@"Last modification date: %@", [date description]); 
} else { 
    NSLog(@"Not found"); 
} 

here你可以找到attributesOfItemAtPath:error:函數的文檔,以及here文件屬性的列表,你可以得到

+0

謝謝你的解決方案! – 2013-03-03 19:52:27

1

散列整個文件都可以工作,但對於大多數用途來說有點矯枉過正。我想結合一些東西是快速訪問:

  • NSFileModificationDate
  • NSFileSize
  • NSFileCreationDate
  • NSFileSystemFileNumber(inode編號)

如果您使用的是NSURL爲主API(iOS 4.0+),我會用

  • NSURLContentModificationDateKey(修改時間)
  • NSURLFileSizeKey
  • NSURLCreationDateKey
  • NSURLFileAllocatedSizeKey
  • NSURLAttributeModificationDateKey(st_ctime?)

我會至少使用修改時間和文件大小。其他的事情的東西,一般不會改變,除非內容的變化,有以下兩點:

  • NSFileSystemFileNumber(inode編號),如果用戶從備份恢復可能會發生變化。
  • NSURLAttributeModificationDateKey應該在屬性更改時更改。如果它是st_ctime(我不完全確定它是),它幾乎是保證捕獲文件的所有更改,但也可能捕獲許多不代表文件內容更改的更改。我不知道這些更改是否發生在外部(例如,iTunes/iCloud備份是否將屬性設置爲備份過程的一部分?)。