从iPhone上的statfs阻止KB / MB / GB

时间:2008-12-27 21:35:46

标签: iphone objective-c cocoa-touch unix

我正在使用statfs(),这为我提供了非超级用户可用的空闲块。

我不确定如何将其转换为KB / MB / GB。

返回的值是:

fundamental file system block size: 4096
total data blocks in file system: 3805452
free blocks in fs: 63425
free blocks avail to non-superuser: 63425
total file nodes in file system: 3805450
free file nodes in fs: 63425

我感兴趣的值是63425,但我不确定KB / MB / GB的含义是什么。

我在iPhone上运行它,一个应用程序应该可以访问2GB我相信,如果在设备上打开那么多,我就是这样做。

所以我应该在2G左右得到一个值,我想。

我针对在线模块运行63425转换​​为MB转换器,但这给了我30MB的结果,不应该是这种情况。

任何人都可以帮我弄清楚如何从这些信息中获取KB / MB / GB吗?

感谢。

2 个答案:

答案 0 :(得分:3)

我使用以下方法取得了成功:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

struct statfs tStats;

statfs([[paths lastObject] cString], &tStats);

unsigned long long Available = ((unsigned long long)tStats.f_bavail) * ((unsigned long long)tStats.f_bsize);

if (Available > 1024)
{
    //Kilobytes
    Available = Available / 1024;

    diskSpaceLbl.text = [[@"Available Disk Space: " stringByAppendingFormat:@"%llu", Available] stringByAppendingString:@" KB"];
}

if (Available > 1024)
{
    //Megabytes
    Available = Available / 1024;

    diskSpaceLbl.text = [[@"Available Disk Space: " stringByAppendingFormat:@"%llu", Available] stringByAppendingString:@" MB"];
}

if (Available > 1024)
{
    //Gigabytes
    Available = Available / 1024;

    diskSpaceLbl.text = [[@"Available Disk Space: " stringByAppendingFormat:@"%llu", Available] stringByAppendingString:@" GB"];
}

答案 1 :(得分:2)

块大小为4096字节,或4KB。因此63425块是63425 * 4KB = 253,700KB,大约是248MB。