对于有意义的问题,让我指导您完成整个测试用例,请随身携带。使用OSX系统调用计算NSURLFileAllocatedSizeKey返回的值
让我们来创建一个文件。
echo 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 -f "%b %Z" ~/SAMPLE
输出:
16 2
添加资源后叉属性,文件系统为该文件分配了16个块。
ls [email protected] ~/SAMPLE
输出:
com.apple.ResourceFork 6
概括起来:我们加到6个字节到资源叉现在这个文件(添加资源派生之前,从只有8)分配的16个块,具有仅2个字节的内容并且资源分叉具有6个字节。
如果我们运行通过NSURL API这个文件,我们可以得到这样的:
NSURL *url = [NSURL fileURLWithPath:@"~/SAMPLE"];
[url getResourceValue:&size forKey:NSURLFileSizeKey error:nil]; // output: 2
[url getResourceValue:&size forKey:NSURLFileAllocatedSizeKey error:nil]; // output: 4096
[url getResourceValue:&size forKey:NSURLTotalFileAllocatedSizeKey error:nil]; // output: 8192
所以我的问题是,如果是只使用系统调用(bash或系统API),我们将如何获得4096,结果为NSURLFileAllocatedSizeKey键?
的NSURLFileSizeKey很简单 - 我们可以只使用ls -l命令,例如,也为NSURLTotalFileAllocatedSizeKey - 我们可以使用从统计(16)块的数量,并通过512乘,但是我们如何得到价值NSURLFileAllocatedSizeKey,在这种情况下是4096?
根据我的理解,如果我们要删除资源fork属性,那么将返回值为NSURLFileAllocatedSizeKey,但是如何使用系统API或bash获取该值?
对不起,很长的文章,谢谢!
是的,这也是我的想法,但我不知道如何以编程方式获取该信息? – mnovakovic
我只是链接对基金会和使用' - [NSURL getResourceValue:forKey:错误:]' –
因此,不幸的是,我不能这样做,我需要使用一些系统级的API(项目的约束),我只需要实现等效的功能。 – mnovakovic