2012-08-27 21 views
8

tarafından okunduktan sonra değiştirilmedi Bazı kullanıcı bilgilerini dosya sisteminde önbelleğe alıyorum. Ben Mülkiyet tuşunu kullanarak erişim süresini kontrol ediyordu Ve sonra ben her önbelleğe dosyanın erişim zamanını bilmek gerekir Dosyanın AccessDate dosyası, [NSData dataWithContentsOfURL: ...]

NSData *cachedMessagesData = [NSData dataWithContentsOfURL:fileDirectoryForUserInfoCache]; 

kullanarak okuma Ancak:

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

Ben erişim tarih olduğunu buldular dosya oluşturma tarihi ile aynı. Dosyayı [NSData dataWithContentOfURL: ...] aracılığıyla okumak, dosyanın erişim süresi özelliğini değiştirmez.

Lütfen bana nedenini söyler misiniz? Erişim zamanını güncellemek için dosyayı okumanın bir yolu var mı? Şimdiden çok teşekkürler.

cevap

7

Kendi sorumu yanıtlama. Sonunda biraz çalışmak zorunda kaldım. Bir NSURL dosyasının erişim tarihi özniteliği bir dosya okunduktan sonra güncellenemez, tarih her zaman NSURL dosyasının oluşturulma tarihi ile aynıdır. Çalışmanın bir yolu, her okumadan sonra dosyanın üzerine yazmaktır, daha sonra erişim tarihi güncellenir. Ama bu bana garip geliyor.

Bunun yerine bir NSURL dosyasının Değiştirme Tarih özniteliğini kullanmaktır. Bu özellik FileManager'ın API setAttributes: ofItemAtPath: tarafından ayarlanabilir. Dosyayı gerçekten değiştirmek yerine, dosyayı okuduktan sonra her seferinde değişiklik tarihini ayarlıyorum. Ve sonra bu NSDate nesnesini NSURL API resourceValuesForKeys tarafından okuyun: daha sonra.

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