8

right now i am able to download remote files successfully,

but this is only if user can select one file if user select multiple file names and press download. So before downloading files i want to check is there enough space on iphone if yes then download and if not then user can see message box "not enough space" and he will uncheck few filename and then he can download files from server...

is there any way to check free space before downloading?

thank you in advance

Pooja
  • 2,162
  • 5
  • 33
  • 64

2 Answers2

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

Use this code to query the filesystem for available free space.

Deniss Fedotovs
  • 1,384
  • 12
  • 22
Saurabh G
  • 1,895
  • 14
  • 15
  • 1
    NSFileSystemFreeSize is determined by statfs(). It should give the value for f_bavail, which is declared as long instead of float. This answer would be better to return long and call [fileSystemFreeSizeInBytes longValue] instead of floatValue. – Adam Lockhart Jun 18 '13 at 19:10
8

Use this function:

#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
}
chakrit
  • 61,017
  • 25
  • 133
  • 162
Max
  • 16,679
  • 4
  • 44
  • 57