有我们需要知道设备磁盘的总空间 剩余空间 以及用户自己占用的空间
#include <sys/param.h>
#include <sys/mount.h>
//获取剩余磁盘空间
- (NSString *) freeDiskSpaceInBytes{
struct statfs buf;
long long freespace = -1;
if(statfs("/var", &buf) >= 0){
freespace = (float)(buf.f_bsize * buf.f_bfree);
}
return [NSString stringWithFormat:@"手机剩余存储空间为:%qi MB" ,freespace/1024/1024];
}
//获取总的磁盘空间 1
- (NSString *) totalDiskSpaceInBytes{
float totalSpace = 0.0f;
NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];
if (dictionary) {
NSNumber *fileSystemSizeInBytes = [dictionary objectForKey: NSFileSystemSize];
totalSpace = [fileSystemSizeInBytes floatValue];
} else {}
return [NSString stringWithFormat:@"%0.2f MB" ,totalSpace/1024/1024];
}
//获取总的磁盘空间 2
- (NSString *)getTotalDiskSpaceInBytes
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
struct statfs tStats;
statfs([[paths lastObject] cStringUsingEncoding:NSUTF8StringEncoding], &tStats);
float totalSpace = (float)(tStats.f_blocks * tStats.f_bsize)/1024/1024;
float freeSpace = (float)(tStats.f_ffree * tStats.f_bsize)/1024/1024;
return [NSString stringWithFormat:@"%f,%f",totalSpace,freeSpace];
}
//获取用户占用磁盘空间
- (NSString *) usersSpaceInBytes{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *userpaths = [[paths lastObject] substringToIndex:([[paths lastObject] length] - 10)];
NSLog(@"%f",[self folderSizeAtPath:userpaths]);
}
//单个文件的大小
- (long long) fileSizeAtPath:(NSString*) filePath{
NSFileManager* manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}
//遍历文件夹获得文件夹大小,返回多少M
- (float ) folderSizeAtPath:(NSString*) folderPath{
NSFileManager* manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:folderPath]) return 0;
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
NSString* fileName;
long long folderSize = 0;
int i = 0;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
i ++;
NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}
return folderSize/(1024.0*1024.0);
}