8

ユーザー情報をファイル システムにキャッシュしています。そして、使用して読む

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:...] を介してファイルを読み取っても、ファイルのアクセス時間プロパティは変更されません。

理由を教えてください。アクセス時間を更新するためにファイルを読み取る方法はありますか? よろしくお願いします。

4

1 に答える 1

7

私自身の質問に答えます。最後に少し手を加える必要がありました。NSURL ファイルのアクセス日付属性は、ファイルを読み取った後に更新することはできません。その日付は、NSURL ファイルの作成日と常に同じです。回避策の 1 つは、読み取り後に毎回ファイルを上書きすると、アクセス日付が更新されます。しかし、これは私には奇妙に聞こえます。

もう 1 つの方法は、代わりに NSURL ファイルの Modification Date 属性を使用することです。この属性は、FileManager の API setAttributes: ofItemAtPath: によって設定できます。実際にファイルを変更するのではなく、ファイルを読み取った後に毎回変更日属性を設定します。そして、後で NSURL API resourceValuesForKeys: によってこの NSDate オブジェクトを読み戻します。

[self.fileManager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[fileDirectoryForUserInfoCache path] error:nil]; 
于 2012-08-29T09:51:15.263 に答える