为什么NSFileManager与statfs关于剩余磁盘空间不同?

时间:2018-12-20 22:08:03

标签: ios

我尝试在iOS 12上执行两种实现以获取剩余的可用磁盘空间。

“苹果之路”

uint64_t get_disk_bytes_free()
{
    uint64_t totalSpace = 0;
    uint64_t totalFreeSpace = 0;
    NSError *error = nil;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];

    if (dictionary)
    {
        NSNumber *fileSystemSizeInBytes = [dictionary objectForKey: NSFileSystemSize];
        NSNumber *freeFileSystemSizeInBytes = [dictionary objectForKey:NSFileSystemFreeSize];
        totalSpace = [fileSystemSizeInBytes unsignedLongLongValue];
        totalFreeSpace = [freeFileSystemSizeInBytes unsignedLongLongValue];
    }
    else
    {
        LOG_APP("Error Obtaining System Memory Info: Domain = %s, Code = %ld", [[error domain] UTF8String], (long)[error code]);
    }

    return totalFreeSpace;
} 

“ Unix方式”-路径仍然是“库/缓存”路径。

struct statfs fs;
if(statfs(path.c_str(),&fs)==0)
{
    if(out_total_space) *out_total_space = (xu64) fs.f_bsize * (xu64) fs.f_blocks;
    if(out_free_space)  *out_free_space  = (xu64) fs.f_bsize * (xu64) fs.f_bfree ;
    return err_code_ok;
}

Apple Way可免费返回4GB。 Unix Way返回大约10GB的可用空间。他们俩平均报告总共16GB(正确),但是该设备几乎没有。只是几个应用程序。

如果我在“设置”中转到“ iPhone存储”查看,它显示已使用11.8GB的16GB。...几乎所有这些都由最底部的“系统”使用(8.65GB)。

如果我重新启动设备,此系统使用情况似乎消失了,但最终又回来了。

有人可以告诉我这两种方法之间的差异是否有充分的理由吗?哪一个更可靠/准确?

0 个答案:

没有答案