2011-03-15 10 views
7

ahora soy capaz de descargar archivos remotos con éxito,cheque suficiente espacio en el dispositivo iPhone antes de la descarga de archivos

pero esto es sólo si el usuario puede seleccionar un archivo si el usuario seleccionar varios nombres de archivo y pulse descarga. Entonces, antes de descargar archivos, quiero verificar si hay suficiente espacio en el iPhone si es así, entonces descarga y si no, el usuario puede ver el cuadro de mensaje "no hay suficiente espacio" y desmarcará algunos nombres de archivo y luego podrá descargar archivos del servidor ...

¿hay alguna manera de verificar el espacio libre antes de descargar?

gracias de antemano

Respuesta

8

Utilice esta función:

#include <sys/param.h> 
#include <sys/mount.h> 

+(float) diskSpace { 
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    struct statfs tStats; 
    statfs([[paths lastObject] cString], &tStats); 
    float total_space = (float)(tStats.f_blocks * tStats.f_bsize); 

    return total_space; 

    // for freespace: 
    // float free_space = (float)(tStats.f_bavail * tStats.f_bsize); 
    // return free_space 
} 
+6

esto le dará espacio total, no libre disponible. Reemplazar f_blocks con f_bavail –

+0

Estoy de acuerdo con Jan Gressmann, debería cambiarse si es la respuesta exceptuada. –

+0

Editado en como comentarios. – chakrit

19
+ (long long)getFreeSpace { 
long long freeSpace = 0.0f; 
NSError *error = nil; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error]; 

if (dictionary) { 
    NSNumber *fileSystemFreeSizeInBytes = [dictionary objectForKey: NSFileSystemFreeSize]; 
    freeSpace = [fileSystemFreeSizeInBytes longLongValue]; 
} else { 
    //Handle error 
} 
return freeSpace; } 

Usar este código para consultar el sistema de archivos para el espacio libre disponible.

+1

NSFileSystemFreeSize está determinado por statfs(). Debería dar el valor de f_bavail, que se declara como long en lugar de float. Esta respuesta sería mejor para volver largo y llamar a [fileSystemFreeSizeInBytes longValue] en lugar de floatValue. –

+0

Gracias por el consejo, @AdamLockhart. Actualizaré la respuesta. –

+0

Este es más rápido ... – Morkrom

Cuestiones relacionadas