检查文件是否已更新

时间:2013-03-03 18:41:10

标签: iphone ios objective-c nsfilemanager

我有iOS应用程序。文档目录中有一些文件。我需要检查这些文件是否已编辑或替换。这样做的正确方法是什么?我应该对文件的哈希值或上次编辑的时间(如何在iOS中获取这个时间)或者有更好的方法来实现它?

2 个答案:

答案 0 :(得分: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可以获取文件属性列表

答案 1 :(得分:1)

散列整个文件会起作用,但对于大多数用途来说有点矫枉过正。我结合了一些可以快速访问的内容:

  • NSFileModificationDate
  • NSFileSize
  • NSFileCreationDate
  • NSFileSystemFileNumber(inode编号)

如果您使用的是基于NSURL的API(iOS 4.0+),我会使用

  • NSURLContentModificationDateKey(修改时间)
  • NSURLFileSizeKey
  • NSURLCreationDateKey
  • NSURLFileAllocatedSizeKey
  • NSURLAttributeModificationDateKey(st_ctime?)

我至少使用修改时间和文件大小。除非内容发生变化,否则其他事情通常不会发生变化,但有几点需要注意:

  • 如果用户从备份恢复,NSFileSystemFileNumber(inode编号)可能会更改。
  • NSURLAttributeModificationDateKey应该在属性更改时更改。如果它是st_ctime(并且我不完全确定它是),那么几乎保证能够捕获文件的所有更改,但也可能会发现很多变化t表示文件内容的更改。我不知道这些更改是否在外部发生(例如,iTunes / iCloud备份集属性是否作为备份过程的一部分?)。