2012-02-16 21 views
6

Tengo el siguiente código que utilizo para fotos de caché me carga de Flickr en la memoria del dispositivo:IOS - Obtener suma de tamaño de archivo en el directorio

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

Quiero limitar esto a 10 MB y luego, si el límite es alcanzado para eliminar la foto más antigua de la memoria caché, ¿cómo puedo obtener el tamaño total de todos los archivos que he guardado y verificar cuál es el más antiguo?

+0

stanford iOS curso? – Uko

+0

Sí, tengo que hacer el comentario más tiempo para poder responder. – 8vius

+0

Cálculo del tamaño que ocupa un directorio en el disco es en realidad un poco más complicado. Averigüe cómo en [esta respuesta] (http://stackoverflow.com/a/28660040/104790) a una pregunta similar. –

Respuesta

9

Usted puede obtener el tamaño de un archivo como tal

NSError *attributesError = nil; 

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

    int fileSize = [fileAttributes fileSize]; 

Así que tal vez puede iterar a través de todos los archivos de la carpeta y sumar los tamaños de archivo ... no estoy seguro si tener una forma directa de obtener el tamaño del directorio, también theres este SO post hablando de este aswell, se puede encontrar una solución here

Para encontrar la fecha de creación del archivo que puede hacer

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

Espero que ayude

+0

Impresionante Daniel, una cosa más, ¿cómo sería una forma segura de verificar si existe un directorio? Porque voy a crear un subdirectorio en el directorio de documentos si no existe – 8vius

+0

[NSFileManager defaultManager] itemExistsAtPath debe hacer el truco – Daniel

+3

En realidad es fileExistsAtPath, Daniel. Ahora, ¿puedes responder una cosa más? Si obtengo los atributos y obtengo el objeto NSFileSize en él, obtengo un número pequeño, si lo llamo en un archivo obtengo un número grande (los dos en bytes lo asumo), no obtengo el tamaño del archivo para el directorio me da el total de todos los archivos dentro de ella? – 8vius

Cuestiones relacionadas