本文主要是介绍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;}
}
这篇关于iOS NSFileManager获取设备硬盘剩余可用容量不准确问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!