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

方法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.mzph.cn/diannao/273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络防火墙技术知多少?了解如何保护您的网络安全

在当前以网络为核心的世界中&#xff0c;网络安全成为了至关重要的议题。网络防火墙是一种常见的保护网络安全的技术&#xff0c;用于监控和控制网络流量&#xff0c;阻止未经授权的访问和恶意活动。今天德迅云安全就带您了解下防火墙的一些相关功能和类型。 防火墙的五个功能…

完全卸载清理干净xcode

1、删除主磁盘的&#xff1a;资源库(Library)/ Preferences/com.apple.dt.Xcode.plist 2、删除用户下的&#xff1a;/Users/administrator/Library/Preferences/com.apple.dt.xcodebuild.plist 3、删除用户下的&#xff1a;/Users/administrator/Library/Preferences/com.app…

find和grep查找搜索命令常用的一些使用方式

目录 find和grep查找搜索命令常用的一些使用方式 一、find命令 二、grep命令 find和grep查找搜索命令常用的一些使用方式 一、find命令 我们知道在Windows系统中想要搜索查找文件&#xff0c;一般需要满足两个条件&#xff1a; 1、知道在哪些目录中查找 2、知道查找的内容&…

(助力国赛)数学建模可视化!!!含代码1(折线图、地图(点)、地图(线)、地图(多边形)、地图(密度)、环形图、环形柱状图、局部放大图)

众所周知&#xff0c;数学建模的过程中&#xff0c;将复杂的数据和模型结果通过可视化图形呈现出来&#xff0c;不仅能够帮助我们更深入地理解问题&#xff0c;还能够有效地向评委展示我们的研究成果。   今天&#xff0c;作者将与大家分享8种强大的数学建模可视化图形及其在…

.Net RabbitMQ(消息队列)

文章目录 一.RabbitMQ 介绍以及工作模式1.RabbitMQ的介绍&#xff1a;2.RabbitMQ的工作模式&#xff1a; 二.RabbitMQ安装1.安装Erlang语言环境2.安装RabbitMQ 三.在.Net中使用RabbitMQ1.HelloWorld模式2.工作队列模式3.发布订阅模式4.Routing路由模式和Topics通配符模式 一.Ra…

使用Python工具库SnowNLP对评论数据标注(二)

这一次用pandas处理csv文件 comments.csv import pandas as pd from snownlp import SnowNLPdf pd.read_csv("C:\\Users\\zhour\\Documents\\comments.csv")#{a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9]}是个字典 emotions[] for txt in df[sentence]:s SnowNLP(…

Kali Linux扩容(使用图形化界面)

因为今天在拉取vulhub中的镜像的时候报错空间不够&#xff0c;因为最开始只给了20GB的空间&#xff0c;所以现在需要扩容了&#xff0c;结合了一下网上的找到了简便的解决方法 1.首先虚拟机设置->磁盘->扩展 小插曲&#xff1a;在对虚拟机磁盘进行扩容以后&#xff0c;…

【数学建模】建筑工地开工问题

题目&#xff1a; 某公司有 6 6 6个建筑工地要开工&#xff0c;每个工地的位置(用平面坐标 ( a , b ) (a,b) (a,b)表示&#xff0c;距离单位: k m km km)及水泥日用量 d ( 单位 : t ) d(单位:t) d(单位:t)由下表给出&#xff0c;目前有两个临时料场位于 P ( 5 , 1 ) &#xff0…

linux启动minicom、u-boot的常用命令、网络命令tftp、nfs/根文件系统、u-boot的bootargs环境变量

linux启动minicom sudo minicom -con进入minicom界面&#xff1a; 打开单片机 在打开之后&#xff0c;我们通过 printenv查看环境配置 在修改配置之前&#xff0c;我们最好先将环境初始化一下&#xff0c;初始化代码为 nand erase.chipu-boot的常用命令 尽管u-boot是一个…

element-ui组件封装技巧

element-ui组件封装技巧 1. 封装内外嵌套的组件 如breadcrumb和breadcrumb-item&#xff0c;这时需要把绑定到breadcrumb上的参数透传给子组件&#xff0c;于是可以 provide() {return {elBreadcrumb: this}; },子组件内&#xff1a; inject: [elBreadcrumb],访问的时候&am…

ObjectMapper解析JSON数据

ObjectMapper的作用 1.背景&#xff1a; 当我们调用API的时候捕获的数据&#xff0c;往往需要结合文档所定义的类进行转换&#xff0c;也就是Java对象与JSON 字符串之间的转换 2.作用&#xff1a; ObjectMapper 是 Jackson 库中的一个关键类&#xff0c;它的作用是将 JSON 数据…

Django中ValueError: localtime() cannot be applied to a naive datetime

这个特定的错误表明你试图将localtime()函数应用于一个“naive datetime”对象。在Python和Django中&#xff0c;datetime对象分为两种&#xff1a;naive&#xff08;无时区信息&#xff09;和aware&#xff08;有时区信息&#xff09;。localtime()函数期望一个aware datetime…

快手校招面试题

单选8道题&#xff08;每题四分&#xff09;&#xff08;操作系统&#xff0c;数据结构&#xff0c;计算机网络等&#xff09; 多选8道题&#xff08;每题四分&#xff09; 主要就是软考平常自己练的哪些选择填空。 然后是大题&#xff0c;一共三道&#xff08;每道17分&…

淘宝app端商品详情数据采集(商品价格,商品库存,商品销量,商品优惠券)

在淘宝App端采集商品详情数据&#xff0c;包括商品价格、库存、销量以及优惠券信息&#xff0c;可以通过多种方式实现。以下是几种常见的方法&#xff1a; 使用淘宝开放平台API&#xff1a; 淘宝开放平台提供了一系列API接口&#xff0c;这些接口允许开发者获取淘宝商品的详细…

第七周学习笔记DAY.4-方法重写与多态

学完本次课程后&#xff0c;你能够&#xff1a; 实现方法重写 深入理解继承相关概念 了解Object类 会使用重写实现多态机制 会使用instanceof运算符 会使用向上转型 会使用向下转型 什么是方法重写 方法的重写或方法的覆盖&#xff08;overriding&#xff09; 1.子类根据…

Go 标准库之 GoRequests 介绍与基本使用

文章目录 一、介绍二、安装三、导入四、基本使用4.1 发送GET 请求4.2 POST请求发送JSON数据4.3 Post 文件上传4.4 GoRequests 使用代理4.5 Gorequests 使用session 五、HTTP服务端代码 一、介绍 官方文档 DOC: https://pkg.go.dev/github.com/levigross/grequests Github: http…

【Python系列】非异步方法调用异步方法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

echars点击图例之后只显示当前数据其他隐藏

1. 确认echarts默认效果 echarts默认点击图例有如下效果&#xff1a; 当前图例显示&#xff0c;点击后隐藏该图例&#xff1b;当前图例隐藏&#xff0c;点击后显示该图例。 2. 确认需要处理的事件 经过在官网查看事件后发现最合适的是legendselectchanged事件&#xff0c;该…

C语言学习/复习23---

一、数据的存储 二、数据类型的介绍 三、整型在内存中的存储 将原码转换为补码。如果数是正数&#xff0c;则补码与原码相同&#xff1b;如果数是负数&#xff0c;则先将原码按位取反&#xff0c;然后加1。将补码转换原补码。如果数是正数&#xff0c;则补码与原码相同&#x…

【简单介绍下日常的启发式算法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…