检查文件是不是更新
Posted
技术标签:
【中文标题】检查文件是不是更新【英文标题】:Check if file is updated检查文件是否更新 【发布时间】:2013-03-03 18:41:09 【问题描述】:我有 ios 应用程序。文档目录中有一些文件。我需要检查这些文件是否被编辑或替换。正确的方法是什么?我应该对文件或上次编辑时间进行一些哈希(如何在 iOS 中获取这个时间)还是有更好的方法来实现这个?
【问题讨论】:
您肯定可以查看它的更新时间。继续将更新的时间保存到某个 plist 并检查它。 还有谁可以在运行时在您的应用程序旁边编辑/替换Documents
目录中的文件...?
iTunes同步,可以从itunes添加一些文件到documets目录
如何获取文件编辑时间?
@George,在这种情况下,请尝试为其实施现有解决方案,例如 this
【参考方案1】:
您可以使用此代码获取文件修改日期:
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你可以得到的文件属性列表
【讨论】:
【参考方案2】:散列整个文件会起作用,但对于大多数用途来说有点矫枉过正。我会结合一些可以快速访问的东西:
NSFileModificationDate NSFileSize NSFileCreationDate NSFileSystemFileNumber(inode 编号)如果您使用的是基于 NSURL 的 API (iOS 4.0+),我会使用
NSURLContentModificationDateKey(修改时间) NSURLFileSizeKey NSURLCreationDateKey NSURLFileAllocatedSizeKey NSURLAttributeModificationDateKey (st_ctime
?)
我至少会使用修改时间和文件大小。其他的东西通常不会改变,除非内容发生变化,但有几点需要注意:
如果用户从备份中恢复,NSFileSystemFileNumber(inode 编号)可能会发生变化。 NSURLAttributeModificationDateKey 应该在 attributes 改变时改变。如果是st_ctime
(我不完全确定是这样),几乎可以保证捕获对文件的所有更改,但也可能捕获很多不代表的更改更改文件内容。我不知道此类更改是否发生在外部(例如,iTunes/iCloud 备份是否将属性设置为备份过程的一部分?)。
【讨论】:
以上是关于检查文件是不是更新的主要内容,如果未能解决你的问题,请参考以下文章