我正在寻找一种更好的方法来以编程方式检测iPhone/iPad设备上的可用/空闲磁盘空间.
目前,我正在使用NSFileManager检测磁盘空间.以下是为我完成此工作的代码片段:

-(unsigned)getFreeDiskspacePrivate {
NSDictionary *atDict = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/" error:NULL];
unsigned freeSpace = [[atDict objectForKey:NSFileSystemFreeSize] unsignedIntValue];
NSLog(@"%s - Free Diskspace: %u bytes - %u MiB", __PRETTY_FUNCTION__, freeSpace, (freeSpace/1024)/1024);

return freeSpace;
}


上面的代码片段我说得对吗?或者,是否有更好的方法来了解总的可用/可用磁盘空间.
我必须检测总的空闲磁盘空间,因为我们必须阻止我们的应用程序在磁盘空间不足的情况下执行同步.

推荐答案

UPDATE: Since a lot of time has passed after this answer and new methods/APIs have been added, please check the updated answers below for Swift etc; Since I've not used them myself, I can't vouch for them.

Original answer: I found the following solution working for me:

-(uint64_t)getFreeDiskspace {
    uint64_t totalSpace = 0;
    uint64_t totalFreeSpace = 0;
    NSError *error = nil;  
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];  

    if (dictionary) {  
        NSNumber *fileSystemSizeInBytes = [dictionary objectForKey: NSFileSystemSize];  
        NSNumber *freeFileSystemSizeInBytes = [dictionary objectForKey:NSFileSystemFreeSize];
        totalSpace = [fileSystemSizeInBytes unsignedLongLongValue];
        totalFreeSpace = [freeFileSystemSizeInBytes unsignedLongLongValue];
        NSLog(@"Memory Capacity of %llu MiB with %llu MiB Free memory available.", ((totalSpace/1024ll)/1024ll), ((totalFreeSpace/1024ll)/1024ll));
    } else {  
        NSLog(@"Error Obtaining System Memory Info: Domain = %@, Code = %ld", [error domain], (long)[error code]);
    }  

    return totalFreeSpace;
}

它返回的大小与设备连接到机器时iTunes显示的大小完全相同.

Ios相关问答推荐

我如何确保用户继续他们在应用程序中停止的地方?

在SWIFT中将圆角+透明背景从导入视频(.mp4)添加到导出视频(.mov)

有没有办法观察滚动的SwiftUI图表的内容偏移量?

如何在SwiftUI中拥有基于操作系统版本的条件修饰符?

用于HDR显示的CI上下文选项

安装新版本 XCode 15.0 后无法运行应用程序 XCode

当应用程序被杀死时是否还能获取位置?

确保方法调配的安全有效实施

NSError 错误领域: "CBATTErrorDomain" 代码: 128 0x0000000282b111a0

如何擦除 Swift 中的 Core Graphics Context 绘图?

使用 Foundation 解压缩文件

.onAppear() 函数不适用于 NavigationLink

满足条件时 SwiftUI 动画背景 colored颜色 变化

为什么我的应用在 Testflight 中没有下载 dSYM 按钮?

通过按钮打开 AppStore

如何以编程方式调用视图控制器?

将自定义对象保存到 NSUserDefaults

如何在 Swift 中将新单元格插入 UITableView

什么是强属性属性

在转发类对象中找不到属性