通过[NSData dataWithContentsOfURL:...]读取文件后文件的AccessDate没有改变

时间:2012-08-27 19:41:23

标签: nsurl

我正在缓存文件系统中的一些用户信息。然后使用

阅读
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:...]读取文件不会更改文件的访问时间属性。

有人可以告诉我为什么吗?有没有办法读取文件以更新访问时间?非常感谢提前。

1 个答案:

答案 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];