我正在缓存文件系统中的一些用户信息。然后使用
阅读NSData *cachedMessagesData = [NSData dataWithContentsOfURL:fileDirectoryForUserInfoCache];
我需要知道每个缓存文件的访问时间,但是,当我使用Property键检查访问时间时:
NSArray *filesInUserInfoCacheDirectory = [self.fileManager contentsOfDirectoryAtURL:self.cacheDirectoryForUserInfo includingPropertiesForKeys:[NSArray arrayWithObjects:@"NSURLCreationDateKey", @"NSURLContentAccessDateKey", nil] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil];
NSDate *accessDate = [[[filesInUserInfoCacheDirectory lastObject] resourceValuesForKeys:[NSArray arrayWithObject:@"NSURLContentAccessDateKey"] error:nil] objectForKey:@"NSURLContentAccessDateKey"];
我发现访问日期与文件创建日期相同。通过[NSData dataWithContentOfURL:...]读取文件不会更改文件的访问时间属性。
有人可以告诉我为什么吗?有没有办法读取文件以更新访问时间?非常感谢提前。
答案 0 :(得分:7)
回答我自己的问题。我终于不得不解决一下了。读取文件后无法更新NSURL文件的访问日期属性,其日期始终与NSURL文件的创建日期相同。解决方法之一是每次读取后覆盖文件,然后更新访问日期。但这对我来说听起来很怪异。
另一种方法是使用NSURL文件的“修改日期”属性。此属性可以由FileManager的API setAttributes:ofItemAtPath:设置。我没有实际修改文件,而是每次读取文件后都设置修改日期属性。然后通过NSURL API resourceValuesForKeys读回这个NSDate对象:稍后。
[self.fileManager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[fileDirectoryForUserInfoCache path] error:nil];