如何使用 APFS 在 iOS 10.3 上获取目录的大小?

Posted

技术标签:

【中文标题】如何使用 APFS 在 iOS 10.3 上获取目录的大小?【英文标题】:How can I get the size of a directory on iOS 10.3 with APFS? 【发布时间】:2017-08-24 15:43:02 【问题描述】:

在 WWDC 2016 上宣布的 APFS 的一个好处是能够非常快速地获取目录的大小,而不必遍历整个文件夹结构。给出的演示是 Finder 中的 Get Info 窗口,无需异步计算目录的大小。

我有一个 ios 应用程序,我需要在其中显示目录的文件大小。现在我递归地做,总结所有子目录中所有文件的大小。但是现在 APFS 已经随 iOS 10.3 一起发布,我想利用新的文件系统更有效地完成它。某处有这个API吗?我没有在NSFileManager documentation 中看到它。现在我使用attributesOfItemAtPathNSFileSize 键。

【问题讨论】:

据我所知,APFS 在该级别应该是透明的。你想使用低级函数之类的东西吗? @MertBuran 文件系统是透明的是有意义的,但它必须在某处影响某些 API 的行为。这只是低级吗? 如果它是透明的则意味着文件系统 API 不会改变,否则它不会是透明的 :) diskutil 的 API 有一些变化,现在你有 diskutil apfs 命令,但我想NSFileManager 级别不会有变化。如果 APFS 优化了文件大小计算,那么您已经拥有了。 @MertBuran 从 WWDC 演示文稿中我的理解是,文件夹的大小实际上与文件夹一起存储。所以我想问题变成了如何正确询问文件夹的大小? @TomHamming 我的第一个猜测是您当前的方法,在目录本身上查找该值而不是递归扫描。那不行吗? 【参考方案1】:

我在 WWDC 2018 的 APFS 实验室中提出了这个问题,它将通过一个名为 dirstat_np 的 API 完成,但它目前是一个私有 API,不能供公众使用。它可能会在某个时候作为公共 API 提供,但没有任何承诺。我要归档雷达。

【讨论】:

雷达编号是多少?你把它发布到 Open Radar 了吗? opensource.apple.com/source/Libc/Libc-1244.1.7/libdarwin/…

以上是关于如何使用 APFS 在 iOS 10.3 上获取目录的大小?的主要内容,如果未能解决你的问题,请参考以下文章

我如何通过 swift 2.3 项目支持 iOS 版本 10.3

iOS 14 的文件管理将支持 APFS 加密磁盘

iOS 10.3 - 如何回复 App Store 评论?

iOS 10.3 中的 WebView 字体不正确

远程文件“存根”如何在带有 APFS 的 Mac 上工作?

如何增加 APFS 卷的大小?