//
// DiskSpaceTool.h
// ScreenRecordMaster
//
// Created by feimo on 15/7/24.
// Copyright (c) 2015年 feimo. All rights reserved.
//
#import <Foundation/Foundation.h>
#include <sys/param.h>
#include <sys/mount.h>
@interface DiskSpaceTool : NSObject
+ (NSString *) freeDiskSpaceInBytes;//手机剩余空间
+ (NSString *) totalDiskSpaceInBytes;//手机总空间
+ (NSString *) folderSizeAtPath:(NSString*) folderPath;//某个文件夹占用空间的大小
@end
//
// DiskSpaceTool.m
// ScreenRecordMaster
//
// Created by feimo on 15/7/24.
// Copyright (c) 2015年 feimo. All rights reserved.
//
#import "DiskSpaceTool.h"
@implementation DiskSpaceTool
//手机剩余空间
+ (NSString *) freeDiskSpaceInBytes{
struct statfs buf;
long long freespace = -1;
if(statfs("/var", &buf) >= 0){
freespace = (long long)(buf.f_bsize * buf.f_bfree);
}
return [self humanReadableStringFromBytes:freespace];
}
//手机总空间
+ (NSString *) totalDiskSpaceInBytes
{
struct statfs buf;
long long freespace = 0;
if (statfs("/", &buf) >= 0) {
freespace = (long long)buf.f_bsize * buf.f_blocks;
}
if (statfs("/private/var", &buf) >= 0) {
freespace += (long long)buf.f_bsize * buf.f_blocks;
}
printf("%lld\n",freespace);
return [self humanReadableStringFromBytes:freespace];
}
//遍历文件夹获得文件夹大小
+ (NSString *) 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;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}
return [self humanReadableStringFromBytes:folderSize];
}
//单个文件的大小
+ (long long) fileSizeAtPath:(NSString*) filePath{
NSFileManager* manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}
//计算文件大小
+ (NSString *)humanReadableStringFromBytes:(unsigned long long)byteCount
{
float numberOfBytes = byteCount;
int multiplyFactor = 0;
NSArray *tokens = [NSArray arrayWithObjects:@"bytes",@"KB",@"MB",@"GB",@"TB",@"PB",@"EB",@"ZB",@"YB",nil];
while (numberOfBytes > 1024) {
numberOfBytes /= 1024;
multiplyFactor++;
}
return [NSString stringWithFormat:@"%4.2f %@",numberOfBytes, [tokens objectAtIndex:multiplyFactor]];
}
@end