我有 iOS 应用程序。文档目录中有一些文件。我需要检查这些文件是否被编辑或替换。正确的方法是什么?我应该对文件或上次编辑时间进行一些哈希(如何在 iOS 中获取这个时间)还是有更好的方法来实现这个?
问问题
387 次
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");
}
于 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 回答