2012-02-16 3 views
6

Ho il seguente codice che uso per le foto della cache Ho carico fuori Flickr nella memoria del dispositivo:iOS - Get somma di dimensione del file nella directory

NSURL *urlForPhoto = [FlickrFetcher urlForPhoto:self.photo format:FlickrPhotoFormatLarge]; 
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *imagePath = [rootPath stringByAppendingString:[self.photo objectForKey:FLICKR_PHOTO_ID]]; 
NSData *dataForPhoto; 
NSError *error = nil; 
if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath]) { 
    dataForPhoto = [NSData dataWithContentsOfFile:imagePath]; 
} else { 
    dataForPhoto = [NSData dataWithContentsOfURL:urlForPhoto]; 
    [dataForPhoto writeToFile:imagePath atomically:YES]; 
} 

voglio limitare questo a 10MB e poi se il limite è raggiunto per rimuovere la foto più vecchia nella cache, come posso ottenere la dimensione totale di tutti i file che ho salvato e verificare quale è la più vecchia?

+0

corso Stanford iOS? – Uko

+0

Sì, devo rendere il commento più lungo così posso rispondere. – 8vius

+0

Il calcolo della dimensione occupata da una directory su disco è in realtà un po 'più complicato. Scopri come in [questa risposta] (http://stackoverflow.com/a/28660040/104790) a una domanda simile. –

risposta

9

È possibile ottenere le dimensioni di un file in questo modo

NSError *attributesError = nil; 

    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError]; 

    int fileSize = [fileAttributes fileSize]; 

Così si può forse scorrere tutti i file nella cartella e sommare le dimensioni dei file ... non è sicuro se theres un modo diretto per ottenere la dimensione di directory, ce n'è anche questo SO post parlando di questo aswell, è possibile trovare una soluzione here

Per trovare la data di creazione del file che si può fare

NSString *path = @""; 
    NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil]; 
    NSDate *result = [fileAttribs valueForKey:NSFileCreationDate]; //or NSFileModificationDate 

Spero che sia utile

+0

Daniel fantastico, un'altra cosa, come sarebbe un modo sicuro di verificare se esiste una directory? Perché creerò una sottodirectory nella directory dei documenti se non esiste – 8vius

+0

[NSFileManager defaultManager] itemExistsAtPath dovrebbe fare il trucco – Daniel

+3

In realtà è fileExistsAtPath, Daniel. Ora, puoi rispondere ancora una cosa? Se ottengo gli attributi e ottengo l'oggetto NSFileSize su di esso, ottengo un numero piccolo, se lo chiamo su un file ottengo un numero elevato (entrambi in byte che presumo), non ottiene la dimensione del file per il directory mi danno il totale di tutti i file al suo interno? – 8vius