1 #include <sys/param.h> 2 #include <sys/mount.h> 3 long long freeSpace() { 4 struct statfs buf; 5 long long freespace = -1; 6 if(statfs("/", &buf) >= 0){ 7 freespace = (long long)buf.f_bsize * buf.f_bfree; 8 } 9 10 return freespace; 11 } 12 13 +(float)getTotalDiskSpaceInBytes { 14 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 15 struct statfs tStats; 16 statfs([[paths lastObject] cString], &tStats); 17 float totalSpace = (float)(tStats.f_blocks * tStats.f_bsize); 18 19 return totalSpace; 20 }
转自:http://blog.csdn.net/cloudhsu/article/details/5825965
1
2
3
4
5
6
7
8
|
+ (
long
long
) freeDiskSpaceInBytes{
struct
statfs buf;
long
long
freespace = -1;
if
(statfs(
"/var"
, &buf) >= 0){
freespace = (
long
long
)(buf.f_bsize * buf.f_bfree);
}
return
freespace;
}
|
在网上看到的例子中,第四行调用函数 statfs 时给定的参数是”/”,其实是不正确的,因为这样拿到的其实是系统分区的剩余空间,这些空间对我们应用程序来说是没有权限使用的,从df命令来看就可以看得很清楚了:
1
2
3
4
5
|
Filesystem Size Used Avail Use% Mounted on
/dev/disk0s1 1.0G 596M 418M 59% /
devfs 36K 36K 0 100% /dev
/dev/disk0s2s1 14G 14G 842M 95% /
private
/var
/dev/disk1 178M 40M 138M 23% /Developer
|
根目录下挂载的分区是 /dev/disk0s1,而对我们来说有用的是 /dev/disk0s2s1。而在iphone或者itunes上面所看到的剩余空间大小也是这个分区的剩余空间大小。从这里,我们也可以很明显的看出标识为16G的iPhone是怎么只有14G的。
转自:http://blog.yorkgu.me/2011/07/20/get-free-disk-space-in-bytes-on-iphone-and-ipad/