2012-08-27 2 views
8

Ich zwischenspeichern einige Benutzerinformationen im Dateisystem. Und dann mitDatei AccessDate nicht nach dem Lesen der Datei geändert von [NSData dataWithContentsOfURL: ...]

Lese
NSData *cachedMessagesData = [NSData dataWithContentsOfURL:fileDirectoryForUserInfoCache]; 

Ich brauche Zugriffszeit jeder Cache-Datei kennen, aber als ich die Zugriffszeit Überprüfung des Objektschlüssel:

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

fand ich, dass das Zugriffsdatum ist Das gleiche wie das Erstellungsdatum der Datei. Das Lesen der Datei über [NSData dataWithContentOfURL: ...] würde die Zugriffszeiteigenschaft der Datei nicht ändern.

Könnte mir bitte jemand sagen, warum? Gibt es eine Möglichkeit, die Datei zu lesen, um die Zugriffszeit zu aktualisieren? Vielen Dank im Voraus.

Antwort

7

Beantworten Sie meine eigene Frage. Ich musste endlich ein wenig herumarbeiten. Das Zugriffsdatum einer NSURL-Datei kann nach dem Lesen einer Datei nicht aktualisiert werden. Das Datum entspricht immer dem Erstellungsdatum der NSURL-Datei. Eine Möglichkeit, um zu arbeiten, besteht darin, die Datei jedes Mal nach dem Lesen zu überschreiben, dann wird das Zugriffsdatum aktualisiert. Aber das klingt komisch für mich.

Der andere Weg ist stattdessen das Änderungsdatum Attribut einer NSURL-Datei zu verwenden. Dieses Attribut kann vom FileManager-API setAttributes gesetzt werden: ofItemAtPath:. Anstatt die Datei tatsächlich zu ändern, setze ich das Änderungsdatumsattribut jedes Mal nach dem Lesen der Datei. Und dann lesen Sie dieses NSDate-Objekt von NSURL API resourceValuesForKeys: später.

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