我们知道在iCloud文件未同步到本地之前,它实际上只是一个占位文件。
如果iCloud文件名为look.pdf,那么实际本地的文件是.look.pdf.icloud,尽管你实际在Find中看到的貌似是look.pdf。
实际上.look.pdf.icloud是一个二进制的plist文件(bplist),但遗憾的是bplist格式Apple并没有公布出来!
那么如何获取该文件的实际大小呢?
主要有两种方法:
1.使用public link来实现 2.解析bplist文件来实现
第一种方法很方便,但生成public link速度慢,给用户体验不佳。
这里主要聊一聊后面一种方法。虽说bplist文件格式是不透明的,但所幸的是我们没必要解析整个bplist文件,我们只需要将文件大小解析出来。
下面是云文件在本地实际的内容:
可以看到它以bplist00开头,然后包含3个Key和他们对应的Value,这3个Key其中就有云文件的大小:NSURLFileSizeKey.但是它对应的值在哪里呢?
通过逆向bplist文件格式,从其中反向查找大小字节,可以知道其值就放在文件名与_下划线字符中间的位置。
注意文件大小保存的字节是可变的,如果不需要不会用4字节来保存(我不知道是否会用8字节,但目前来说4字节足够