对于有意义的问题,让我引导您完成整个测试用例,所以请耐心等待。
让我们创建一个文件。
echo 0> 〜/样品
这会产生一个大小为2个字节的简单文件(默认情况下,echo会附加新行,这不会影响示例)。
stat -f“%b%Z”〜/ SAMPLE
输出:
8 2
正如预期的那样,这个文件分配了8个块,大小为2个字节(Finder中的Get Info告诉我们它是2个字节长,4k在磁盘上,这是8个块*每个块512个字节),所以它是全部好。
现在让我们添加一个属性,特别是一个资源分支:
xattr -w com.apple.ResourceFork 000000~ / SAMPLE
让我们再次调用stat:
stat -f“%b%Z”〜/ SAMPLE
输出:
16 2
添加资源fork属性后,文件系统为该文件分配了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?
根据我的理解,如果我们要删除资源fork属性,它将是 NSURLFileAllocatedSizeKey 键返回的值,但是我们如何使用系统API或bash获取该值?
答案 0 :(得分:0)
也许 NSURLFileAllocatedSizeKey 仅指数据分配的空间,就像 NSURLFileSizeKey 仅指数据分叉的大小一样。