1

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

4

2 回答 2

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");
}

在这里你可以找到attributesOfItemAtPath:error:函数的文档,在这里你可以得到文件属性列表

于 2013-03-03T18:59:28.120 回答
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 备份是否将属性设置为备份过程的一部分?)。
于 2013-03-03T19:45:23.067 回答