我尝试在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)。
如果我重新启动设备,此系统使用情况似乎消失了,但最终又回来了。
有人可以告诉我这两种方法之间的差异是否有充分的理由吗?哪一个更可靠/准确?