代码之家  ›  专栏  ›  技术社区  ›  kdbdallas

从iPhone上的statfs阻止到kb/mb/gb

  •  0
  • kdbdallas  · 技术社区  · 16 年前

    我使用的是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-wise。

    我在iphone上运行这个程序,我相信如果这个设备上有那么多的开放空间,应用程序应该可以访问2GB,在我的例子中就是这样。

    所以我想我应该得到一个大约2g的值。

    我运行63425对一个在线块到MB转换器,但这给了我一个30MB的结果,不应该是这样的。

    有人能帮我弄清楚如何从这个信息中获取kb/mb/gb吗?

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  2
  •   tvanfosson    16 年前

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

        2
  •  3
  •   kdbdallas    16 年前

    我成功地使用了以下各项:

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