2013-03-03 89 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备份是否将属性设置为备份过程的一部分?)。