iOS NSFileManager获取设备硬盘剩余可用容量不准确问题

devtools/2024/9/23 1:05:19/

方法1. 通用
NSFileManager attributesOfFileSystemForPath: error:

方法2. available(iOS 11.0)
NSURL resourceValuesForKeys: error:

发现问题:方法1获取到的剩余值并不准确,测得使用剩余值远小于实际的手机存储容量剩余。所以使用方法2优先。下面代码中字典信息的Key值可以获取到对应的容量值。

示例代码:
 

#import "UIDevice+DiskSpace.h"+ (long)freeDiskSpaceInBytes
{NSString *path = [MYPath document];NSError * error = nil;if (@available(iOS 11.0, *)) {NSURL * url = [[NSURL alloc]initFileURLWithPath:[NSString stringWithFormat:@"%@",path]];NSDictionary<NSURLResourceKey, id> * dict = [url resourceValuesForKeys:@[NSURLVolumeTotalCapacityKey,NSURLVolumeAvailableCapacityForImportantUsageKey] error:&error];if (error) {NSLog(@"Error Obtaining System Memory Info: Domain = %@, Code = %@", [error domain], @([error code]));return 0;}uint64_t capacity = [dict[NSURLVolumeTotalCapacityKey] longLongValue];uint64_t freeSize = [dict[NSURLVolumeAvailableCapacityForImportantUsageKey] longLongValue];const uint64_t reserve  = 200 * 1024 * 1024;                  /// 200m保留空间const CGFloat  GB       = 1024 * 1024 * 1024;NSLog(@"Memory Capacity of %.2f GB with %.2f GB Free memory available.", capacity / GB, (freeSize - reserve) / GB);return freeSize - reserve;} else {NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:path error:&error];if (attributes) {uint64_t       capacity = [attributes[NSFileSystemSize] unsignedLongLongValue];uint64_t       freeSize = [attributes[NSFileSystemFreeSize] unsignedLongLongValue];const uint64_t reserve  = 200 * 1024 * 1024;                  /// 200m保留空间const CGFloat  GB       = 1024 * 1024 * 1024;NSLog(@"Memory Capacity of %.2f GB with %.2f GB Free memory available.", capacity / GB, (freeSize - reserve) / GB);return freeSize - reserve;}NSLog(@"Error Obtaining System Memory Info: Domain = %@, Code = %@", [error domain], @([error code]));return 0;}
}


http://www.ppmy.cn/devtools/7839.html

相关文章

【js】解决读取文件源内容总是得到默认index.html

在项目开发中&#xff0c;资源的获取都可以通过网络&#xff0c;所以获取文件内容&#xff0c;只需要将文件地址作为请求发送即可 读取文件源内容 const path 资源地址&#xff08;必须是绝对路径&#xff09;fetch(path).then((response) > {if (!response.ok) {throw ne…

数据仓库、数据中台、大数据平台的关系?

一、数据中台 数据中台是一个数据运营的概念&#xff0c;主要功能是将跨领域的数据集中聚合和治理&#xff0c;将其抽象为服务&#xff0c;提供具有业务价值的逻辑概念。 相较于传统的大数据平台&#xff0c;数据中台是升级版的概念&#xff0c;并不再简单地将各个功能混在一起…

【蓝桥杯2025备赛】集合求和

集合求和 题目描述 给定一个集合 s s s&#xff08;集合元素数量 ≤ 30 \le 30 ≤30&#xff09;&#xff0c;求出此集合所有子集元素之和。 输入格式 集合中的元素&#xff08;元素 ≤ 1000 \le 1000 ≤1000&#xff09; 输出格式 s s s 所有子集元素之和。 样例 #1 …

大创项目推荐 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

碎碎笔记01

1. 多元线性回归 通过现有数据&#xff0c;总结出数据所对应的线性方程的斜率与截距 f ( x 1 , x 2 , . . . , x n ) w 1 x 1 w 2 x 2 . . . w n x n b f(x_1, x_2, ..., x_n) w_1x_1 w_2x_2 ... w_nx_n b f(x1​,x2​,...,xn​)w1​x1​w2​x2​...wn​xn​b w&a…

wasm 系列之 WebAssembly 和 emscripten 暴力上手

wasm 是什么&#xff1f; wasm 是 WebAssembly 的缩写。wasm 不是传统意义上的汇编语言&#xff0c;而是一种编译的中间字节码&#xff0c;可以在浏览器和其他 wasm runtime 上运行非 JavaScript 类型的语言&#xff0c;只要能被编译成 wasm&#xff0c;譬如 kotlin/wasm、Rus…

展开说说:Android Fragment完全解析-卷二

书接上回&#xff0c;说一下fragment搭配Viewpager的使用。 是什么 Fragment已经在卷一整理过了&#xff0c;这里说一下ViewPager&#xff0c;ViewPager是一个可以左右滑动的容器组件&#xff0c;继承自ViewGroup。一般是用在首页banner和详情页的轮播图展示、APP首次使用的新…

每日算法4/21

LCR 073. 爱吃香蕉的狒狒 题目 狒狒喜欢吃香蕉。这里有 N 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉。警卫已经离开了&#xff0c;将在 H 小时后回来。 狒狒可以决定她吃香蕉的速度 K &#xff08;单位&#xff1a;根/小时&#xff09;。每个小时&#xff0c;她将会选…