2012-08-27 17 views
8

Estoy almacenando en caché alguna información del usuario en el sistema de archivos. Y después de leer usandoFecha de acceso del archivo no modificada después de leer el archivo por [NSData dataWithContentsOfURL: ...]

NSData *cachedMessagesData = [NSData dataWithContentsOfURL:fileDirectoryForUserInfoCache]; 

Necesito saber el tiempo de acceso de cada archivo almacenado en caché, sin embargo, cuando me iba a registrar el tiempo de acceso con la tecla de propiedad:

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

me encontré con que la fecha de acceso es lo mismo que la fecha de creación del archivo. Leer el archivo a través de [NSData dataWithContentOfURL: ...] no cambiaría la propiedad de tiempo de acceso del archivo.

¿Alguien podría decirme por qué? ¿Hay alguna forma de leer el archivo para actualizar el tiempo de acceso? Muchas gracias por adelantado.

Respuesta

7

Respondiendo a mi propia pregunta. Finalmente tuve que trabajar un poco. El atributo de fecha de acceso de un archivo NSURL no se puede actualizar después de leer un archivo, su fecha es siempre la misma que la fecha de creación del archivo NSURL. Una forma de evitar el problema es sobrescribir el archivo cada vez que lo lea, luego se actualiza la fecha de acceso. Pero esto me suena raro.

La otra forma es usar el atributo de fecha de modificación de un archivo NSURL. Este atributo se puede establecer mediante la API SetAttributes de FileManager: ofItemAtPath:. En lugar de modificar el archivo, configuré el atributo de fecha de modificación cada vez que leí el archivo. Y luego vuelva a leer este objeto NSDate por la API de NSURL resourceValuesForKeys: más adelante.

[self.fileManager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[fileDirectoryForUserInfoCache path] error:nil]; 
Cuestiones relacionadas