objective-c - Mac 10.6 及更高版本的可用启动磁盘空间错误

标签 objective-c macos cocoa nsfilemanager

我正在使用以下代码来获取启动磁盘的可用磁盘空间。

NSFileManager *fm = [NSFileManager defaultManager];

double freeSpace = 0.0;
NSDictionary *attr = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/" error:nil];
if (!error) {
    freeSpace = [[attr objectForKey:NSFileSystemFreeSize] doubleValue];
}
//Convert from bytes to GB.
freeSpace = freeSpace/(1024*1024*1024);

但对于 MacOS 10.6 及更高版本,它给出的大小错误。一段时间后,我发现对于 10.5,我们需要将其除以 (1024*1024*1024) 才能获得正确的可用大小。对于 10.6 及更高版本,我必须将其除以 (1000*1000*1000) 才能获得正确的大小(当我们右键单击“硬盘”->“获取信息”时,该大小会显示在 Finder 中)。 现在,我不认为除以 1000 而不是 1024 是将 KB 转换为 MB 或其他值的正确方法。那么为什么在Mac 10.6及以上版本会这样呢?

是否有任何其他函数可以让我获得可用的启动磁盘空间,最多精确到小数点后两位?

最佳答案

除某些类型的软盘驱动器外,磁盘驱动器始终以 1000 的幂来描述和销售。内存使用 1024 的幂,传统上(ab)使用 SI 的 1000 幂前缀。程序员倾向于遵循内存约定,但它从来都不是通用且明确的。

1999 年,IEC 建议仅对 1000 的幂使用 SI 前缀(千、兆等),并使用 a new set of prefixes 1024 的幂。自 10.6 起,Mac OS X 就磁盘和文件遵循此建议,从而更接近地匹配磁盘的广告大小,但 RAM 继续使用 1024 的幂的 SI 前缀。

关于objective-c - Mac 10.6 及更高版本的可用启动磁盘空间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10494373/

相关文章:

objective-c - NStableview setDatasource EXC_BAD_ACCESS

java - 在 Java 中,如何保持原始窗口的焦点,尽管单击 JFrame

objective-c - 如何在Cocoa中构建OSXFUSE.framework?

objective-c - 未设置标签字符串

ios - 使用 MKPolyline 在 MKMapView 中绘制多组线

objective-c - 如何获得当前音量

macos - libx265 现在调用 ffmpeg 的过时版本

objective-c - 使用 NSBezierPath 快速绘制至少 4000 个线段

ios - 具有不同自动旋转选项的屏幕

macos - 设置应用程序的默认 NSAppearance