0

为了使问题有意义,让我指导您完成整个测试用例,所以请多多包涵。

让我们创建一个文件。

回声 0 > ~/SAMPLE

这会生成一个大小为 2 字节的简单文件(默认情况下,echo 会附加新行,这不会影响示例)。

stat -f "%b %Z" ~/SAMPLE

输出:

8 2

正如预期的那样,这个文件分配了 8 个块,大小为 2 个字节(在 Finder 中获取信息告诉我们,它是 2 个字节长,磁盘上 4k,即 8 个块 * 512 个字节/块),所以一切都很好。

现在让我们添加一个属性,特别是资源分支:

xattr -w com.apple.ResourceFork 000000 ~/SAMPLE

让我们再次调用 stat:

stat -f "%b %Z" ~/SAMPLE

输出:

16 2

添加资源分叉属性后,文件系统为该文件分配了 16 个块。

ls -l@ ~/SAMPLE

输出:

com.apple.ResourceFork 6

总结一下:我们在资源分支中添加了 6 个字节,这个文件现在分配了 16 个块(在添加资源分支之前只有 8 个),内容只有 2 个字节,资源分支有 6 个字节。

如果我们通过 NSURL API 运行这个文件,我们会得到:

NSURL *url = [NSURL fileURLWithPath:@"~/SAMPLE"];

[url getResourceValue:&size forKey: NSURLFileSizeKey错误:nil]; // 输出:2

[url getResourceValue:&size forKey: NSURLFileAllocatedSizeKey错误:nil]; // 输出:4096

[url getResourceValue:&size forKey: NSURLTotalFileAllocatedSizeKey错误:nil]; // 输出:8192

所以我的问题是,如果只使用系统调用(bash 或系统 API),我们将如何获得 4096,即NSURLFileAllocatedSizeKey键的结果?

NSURLFileSizeKey 很简单——我们可以只使用 ls -l 例如,也可以用于 NSURLTotalFileAllocatedSizeKey——我们可以使用 stat (16) 中的块数并乘以 512,但是我们如何获得NSURLFileAllocatedSizeKey的值,即 4096 in这个案例?

据我了解,如果我们要删除资源分支属性,它将是NSURLFileAllocatedSizeKey键返回的值,但是我们如何使用系统 API 或 bash 获取该值?

4

1 回答 1

0

也许NSURLFileAllocatedSizeKey仅指为数据叉分配的空间,就像NSURLFileSizeKey仅指数据叉的大小一样。

于 2016-09-21T02:09:49.727 回答