[]layadcc打包后需要整包更新的问题

我们需要在游戏启动的时候,检测到哪些文件需要更新,然后用进度条来显示更新进度,现在遇到的问题是
   如何根据assets/cache/www.xxx.comxia下面的文件来判断哪些是需要更新?? 
 
1、如图1,打包后的文件名是crc值吗?这个值是通过对应文件路径算的还是文件内容呢?
2、如图1,filetable.bin,filetable.txt,filetable1.txt分别存的是什么内容呢?如果是文件对应的crc,为啥有3个呢?猜测.bin是filetable.txt的压缩版,但是为啥有filetable.txt,filetable1.txt两个呢?
3、如图2,打开filetable.txt,里面每行前面那个crc是对应的打包好的文件名么,那后面的呢?还有第一行后面的值为何是个1。。。。
 
2017.4.4gen更新
感谢cuixueying的解答,还有点疑惑
如图3所示,filetalbe.txt第四行对应allfiles第一行,但是我对应文件内容的md5,sha1,crc32值在filetalble都找不到,请问dccdac算出来的hash是你们自己的算法吗,还是什么qin其他算法呢?
1.png 2.png 1.png
已邀请:

cuixueying

赞同来自:

       dcc文件的前3行是版本和校验信息,跟着的每一行代表一个文件,每一行的前半部分是相对目录的hash,后半部分是文件内容的hash。相对目录只是一个数字,已经无法根据这个数字直接恢复原始文件名称了。好在update目录下还有一个allfiles.txt,他跟filetable.txt正好是一一对应的。即filetable.txt的第4行对应allfiles.txt的第一行,以此类推,就能知道每个文件对应的dcc目录id和内容hash值。 至于filetable1.txt,是历史遗留文件,已经不用了。
      filetable.bin是filetable.txt的二进制版本,也是实际使用的文件。
      但是你知道了这些并不能立即用来做差异化更新,因为dcc文件是完整的校验值,并不是只包含差异文件,只有跟本地保存的filetable.txt比较之后,才能知道差异的文件。
 
你的需求可以通过简单的在一开始就下载allfiles.txt中的所有文件来实现。流程如下:
1. 完成引擎原来的dcc更新流程,获得最新的filetable文件。
2. 下在allfiles.txt,解析获得所有文件列表。
3. 循环下载列表中所有的文件,如果相应的文件没有更新,就会直接忽略过去,如果需要更新就会去下载实际文件,并更新本地缓存。
4. 更新进度。如果大部分文件都没变,可能进度会不均匀。
 

要回复问题请先

商务合作
商务合作