获取磁盘空间属性NSFileSystem+;属性办公系统不';无法在iOS设置应用程序中匹配信息
我正在尝试使用以下代码从我的iOS应用程序中获取总/已用/可用空间(以字节为单位),这些代码改编自本网站上的各种解决方案获取磁盘空间属性NSFileSystem+;属性办公系统不';无法在iOS设置应用程序中匹配信息,ios,objective-c,xcode,nsfilemanager,nsdocumentdirectory,Ios,Objective C,Xcode,Nsfilemanager,Nsdocumentdirectory,我正在尝试使用以下代码从我的iOS应用程序中获取总/已用/可用空间(以字节为单位),这些代码改编自本网站上的各种解决方案 - (unsigned long long)totalDiskSpace { unsigned long long space = 0; NSError *error = nil; NSArray<NSString *> *paths = NSSearchPathForDirectoriesInDomains(NSDocume
- (unsigned long long)totalDiskSpace {
unsigned long long space = 0;
NSError *error = nil;
NSArray<NSString *> *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSDictionary *dict = [[NSFileManager defaultManager] attributesOfFileSystemForPath:paths.lastObject error:&error];
if (dict) {
NSNumber *size = dict[NSFileSystemSize];
space = size.unsignedLongLongValue;
}
return space;
}
- (unsigned long long)freeDiskSpace {
unsigned long long space = 0;
NSError *error = nil;
NSArray<NSString *> *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSDictionary *dict = [[NSFileManager defaultManager] attributesOfFileSystemForPath:paths.lastObject error:&error];
if (dict) {
NSNumber *size = dict[NSFileSystemFreeSize];
space = size.unsignedLongLongValue;
}
return space;
}
-(无符号长)总磁盘空间{
无符号长空间=0;
n错误*错误=nil;
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSDictionary*dict=[[NSFileManager defaultManager]属性OfficeSystemForPath:Path.lastObject错误:&error];
if(dict){
NSNumber*size=dict[NSFileSystemSize];
空格=size.unsignedLongValue;
}
返回空间;
}
-(无符号长)空闲磁盘空间{
无符号长空间=0;
n错误*错误=nil;
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSDictionary*dict=[[NSFileManager defaultManager]属性OfficeSystemForPath:Path.lastObject错误:&error];
if(dict){
NSNumber*size=dict[NSFileSystemFreeSize];
空格=size.unsignedLongValue;
}
返回空间;
}
问题是,当我将这些值与用户在Settings.app中可能看到的值进行比较时,它们完全不符合我在256 GB iPhone X上进行的测试,虽然“总”空间值是正确的,但“空闲”空间的值似乎比应该的要小得多
在我的设备上,我得到的值是255937040384
(~255GB),但只有175536754688
是免费的,这意味着80400285696
已使用(~80GB)。但是,在Settings.app中,我的设备显示仅使用了52.4 GB
有人知道原因吗?不要使用
NSFileManager
,而是使用NSURL
的resourcesvaluesforkeys:
方法获取驱动器的可用空间<代码>NSURL在此处提供了三个相关常数:
-驱动器上的文字可用空间,应与NSFileManager返回的值相同NSURLVolumeAvailableCapacityKey
—驱动器上的文字可用空间,加上磁盘上任何“临时”文件的大小,如果需要,这些文件可以自动删除,以便为其他内容提供空间,以及:NSURLVolumeAvailableCapacityForImportantUsageKey
-临时文件本身的可用空间量,根据我的经验,通常比实际可用空间小一些nsurlVolumeAvailableCapacityforuportUnisticUsageKey
NSURLVolumeAvailableCapacityForImportantUsageKey
可能是Settings.app报告的值,因为从用户的角度来看,这是您必须使用的空间量
另外,一般来说,如果您使用的是采用路径而不是URL的Apple Objective-C或Swift API,那么它可能是一个遗留API。基于URL的API通常更为完整和最新,通常应优于基于路径的API。在这种情况下,重要/机会主义概念之前的基于路径的API导致其缺乏读取这些值的工具。而不是使用
NSFileManager
,使用NSURL
的resourcesvaluesforkeys:
方法获取驱动器的可用空间<代码>NSURL在此处提供了三个相关常数:
-驱动器上的文字可用空间,应与NSFileManager返回的值相同NSURLVolumeAvailableCapacityKey
—驱动器上的文字可用空间,加上磁盘上任何“临时”文件的大小,如果需要,这些文件可以自动删除,以便为其他内容提供空间,以及:NSURLVolumeAvailableCapacityForImportantUsageKey
-临时文件本身的可用空间量,根据我的经验,通常比实际可用空间小一些nsurlVolumeAvailableCapacityforuportUnisticUsageKey
NSURLVolumeAvailableCapacityForImportantUsageKey
可能是Settings.app报告的值,因为从用户的角度来看,这是您必须使用的空间量
另外,一般来说,如果您使用的是采用路径而不是URL的Apple Objective-C或Swift API,那么它可能是一个遗留API。基于URL的API通常更为完整和最新,在这种情况下,通常应优先于基于路径的API,重要/机会主义概念之前基于路径的API导致它缺乏读取这些值的工具。如果使用
NSURL
的resourceValues市场:
与NSURLVolumeCapacityKey
和nsurlVolumeTatalCapacityKey
一起使用,您还会看到这一点吗,但我不确定这有什么关系。根据苹果公司的规定,NSURLResourceKey只有总空间的值,而不是可用空间或已用空间的值。我从NSURL获得的总空间值与我从NSFileManager获得的总空间值相同,而且是准确的。这是我寻找的不准确的可用空间量。NSFileManager说,每个设置的可用空间比实际可用空间少约30GBNSURLResourceKey
包含三个常量来检查可用空间量:NSURLVolumeAvailableCapacityKey
,NSURLVolumeAvailableCapacityForImportantUsageKey
,以及NSURLVolumeAvailableCapacityForOpportunisticUsageKey
。如果我的预感是正确的,设置应用程序可能会将其中一项读取为可用空间(可能是…for importantusagekey
),而不是驱动器上的实际空间量。找到答案的一种方法。我没有可以测试的iOS设备,但当我在Mac上尝试时,NSURLVolumeAvailableCapacityForImportantUsageKey
give