2010-02-08 10 views
12

cómo obtengo el tamaño de la carpeta NSCachesDirectory i.e/Library/Cache. quiero saber el tamaño de esta carpeta para poder aclarar esto.tamaño de NSCachesDirectory en iphone

gracias.

Editar: aquí está mi código.

NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:folderPath error:&error]; 
if (attributes != nil) { 

    if (fileSize = [attributes objectForKey:NSFileSize]) { 
     NSLog(@"size of :%@ = %qi\n",folderPath, [fileSize unsignedLongLongValue]); 
    } 

} 

cuando funciono esto se da a mi tamaño del archivo 768 (no sé bytes o KB) y puedo comprobar en el buscador que me muestra la carpeta tamaño 168KB. no se lo que está mal.

Respuesta

11

algo como lo siguiente debería ayudar a empezar:

- (unsigned long long int) cacheFolderSize { 
    NSFileManager *_manager = [NSFileManager defaultManager]; 
    NSArray *_cachePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *_cacheDirectory = [_cachePaths objectAtIndex:0]; 
    NSArray *_cacheFileList; 
    NSEnumerator *_cacheEnumerator; 
    NSString *_cacheFilePath; 
    unsigned long long int _cacheFolderSize = 0; 

    _cacheFileList = [_manager subpathsAtPath:_cacheDirectory]; 
    _cacheEnumerator = [_cacheFileList objectEnumerator]; 
    while (_cacheFilePath = [_cacheEnumerator nextObject]) { 
     NSDictionary *_cacheFileAttributes = [_manager fileAttributesAtPath:[_cacheDirectory stringByAppendingPathComponent:_cacheFilePath] traverseLink:YES]; 
     _cacheFolderSize += [_cacheFileAttributes fileSize]; 
    } 

    return _cacheFolderSize; 
} 

EDITAR

El valor devuelto será en bytes: cf. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSFileSize

Suponiendo que está ejecutando esto en el simulador, es probablemente Buscador de informes de uso de bloques de archivo para esos bytes. Esos bloques serán necesariamente más grandes que los datos del archivo en sí. Lea sobre el sistema HFS + para aprender sobre bloques: http://en.wikipedia.org/wiki/HFS_Plus

No estoy seguro de qué sistema de archivos se utiliza en el iPhone, o cuál será el tamaño del bloque de archivos en el dispositivo, así que mientras el total de bytes será el lo mismo, el uso real del disco puede ser diferente entre el simulador y el dispositivo.

+0

Gracias Alex, he agregado mi código de muestra, ¿hay alguna forma de obtenerlo sin enumerar todos los archivos? – Nnp

+0

No lo sé. Si el rendimiento es un problema, puede enumerar una vez al inicio y mantener una variable de instancia para el tamaño de la carpeta de caché a medida que los elementos se agregan y eliminan. –

+0

O puede realizar esto en una secuencia de fondo como sugiere Rob Napier. –

1

¿De verdad quiere decir/Library/Cache, o quiere decir ~/Library/Cache (el directorio de la caché de la aplicación). Por lo general, no tienes control sobre el primero, así que supongo que te refieres al último.

Use NS-PerfumeManager's -enumeratorAtPath: para recorrer el directorio y usar -attributesOfItemAtPath: error: para obtener el tamaño de archivo. Recomiendo hacerlo lentamente en un hilo de fondo para evitar el bloqueo de tu aplicación.

+0

Gracias Rob, he agregado mi código de muestra, no sé si está bien o mal? – Nnp

+0

Curiosamente, las aplicaciones del App Store pueden acceder a la carpeta del caché del sistema (/ var/mobile/Library/Caches). – rpetrich

+0

Su código anterior está dando el tamaño del elemento de la carpeta en sí (768 bytes). Este es el espacio utilizado para realizar un seguimiento de lo que está en la carpeta, no el espacio requerido por los elementos en la carpeta. Necesitas recorrer todos esos elementos y sumar sus tamaños, como en el código de Alex. –

Cuestiones relacionadas