gpt4 book ai didi

ios - 获取磁盘空间属性 NSFileSystem +attributesOfFileSystem 与 iOS 设置应用程序中的信息不匹配

转载 作者:行者123 更新时间:2023-11-28 18:47:16 26 4
gpt4 key购买 nike

我正在尝试使用以下代码从我的 iOS 应用程序中获取总/已用/可用空间(以字节为单位),该代码改编自该网站上的各种解决方案。

 - (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;
}

问题是,当我将这些值与用户在他们的 Settings.app 中看到的值进行比较时,它们完全不对 我正在 256 GB iPhone X 上进行测试,而“总”空间值是正确的,“免费”空间的值(value)似乎比应有的要低很多。

在我的设备上,我得到的值是 255937040384(~255GB),但只有 175536754688 是免费的,转换为 80400285696 使用(~80GB)。但是,在 Settings.app 中,我的设备显示仅使用了 52.4 GB。

有人知道为什么会这样吗?

最佳答案

不使用 NSFileManager,而是使用 NSURLresourceValuesForKeys: 方法来获取驱动器的可用空间。 NSURL 在这里提供了三个相关常量:

  • NSURLVolumeAvailableCapacityKey——您驱动器上的实际可用空间,它应该与 NSFileManager 返回的值相同,

  • NSURLVolumeAvailableCapacityForImportantUsageKey——您驱动器上的实际可用空间,加上磁盘上任何“临时”文件的大小,如果需要为其他东西提供空间,可以自动删除这些文件,以及:

  • NSURLVolumeAvailableCapacityForOpportunisticUsageKey—临时文件本身可用的空间量,根据我的经验,这通常比实际可用空间少一些。

在您的情况下,NSURLVolumeAvailableCapacityForImportantUsageKey 可能是 Settings.app 报告的值,因为从用户的角度来看,这是您必须使用的空间量。

此外,作为一般规则,如果您使用的是采用路径而不是 URL 的 Apple Objective-C 或 Swift API,则它可能是遗留 API。基于 URL 的 API 通常更完整和最新,并且通常比基于路径的 API 更受欢迎——在这种情况下,基于路径的 API 早于重要/机会概念导致它缺乏用于读取这些值。

关于ios - 获取磁盘空间属性 NSFileSystem +attributesOfFileSystem 与 iOS 设置应用程序中的信息不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49197692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com