2012-08-27 49 views
8

我在文件系統中緩存某些用戶信息。然後使用通過[NSData dataWithContentsOfURL:...]讀取文件後文件的AccessDate未被更改

NSData *cachedMessagesData = [NSData dataWithContentsOfURL:fileDirectoryForUserInfoCache]; 

我需要知道每個緩存文件的訪問時間閱讀,但是,當我使用屬性鍵檢查訪問時間:

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:...]讀取文件不會改變文件的訪問時間屬性。

請問誰能告訴我爲什麼?有沒有辦法讀取文件以更新訪問時間?提前致謝。

回答

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