2012-08-27 11 views
8

Sto memorizzando nella cache alcune informazioni utente nel file system. E poi la lettura utilizzandoAccessDate del file non modificato dopo aver letto il file da [NSData dataWithContentsOfURL: ...]

NSData *cachedMessagesData = [NSData dataWithContentsOfURL:fileDirectoryForUserInfoCache]; 

ho bisogno di sapere il tempo di accesso di ogni file memorizzato nella cache, tuttavia, quando stavo controllando il tempo di accesso utilizzando il tasto Proprietà:

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

Ho trovato che la data di accesso è lo stesso della data di creazione del file. La lettura del file tramite [NSData dataWithContentOfURL: ...] non modifica la proprietà del tempo di accesso del file.

Qualcuno potrebbe dirmi perché? C'è un modo per leggere il file per rendere aggiornato il tempo di accesso? Grazie mille in anticipo.

risposta

7

Risposta alla mia domanda. Alla fine ho dovuto lavorare un po '. L'attributo data di accesso di un file NSURL non può essere aggiornato dopo aver letto un file, la sua data è sempre uguale alla data di creazione del file NSURL. Un modo per aggirare il problema è sovrascrivere il file ogni volta che viene letto, quindi la data di accesso viene aggiornata. Ma questo suona strano per me.

L'altro modo è utilizzare l'attributo Data modifica di un file NSURL. Questo attributo può essere impostato dall'API di FileManager setAttributes: ofItemAtPath:. Invece di modificare effettivamente il file, imposto l'attributo della data di modifica ogni volta dopo aver letto il file. E poi rileggi questo oggetto NSDate dall'API NSURL resourceValuesForKeys: in seguito.

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