CAB文件API澄清

Gle*_*234 0 delphi winapi cab

由于我在任何地方都没有看到任何内容,并没有指出原有的Microsoft文档,或者源代码似乎没有回答我的问题,我想我可能会问一些这里的事情.(Delphi标签就在那里,因为这就是我的开发环境对我正在制作的代码的影响)

也就是说,我有一些问题,API文件没有回答.第一个:fdi_notify消息.什么是"我的责任"是编码这些:fdintCABINET_INFO: fdintPARTIAL_FILE: fdintNEXT_CABINET: fdintENUMERATE:?我将通过一个例子说明我的意思.因为fdintCLOSE_FILE_INFO,"我的责任"是关闭与给定的句柄相关的文件,并根据fdi_notify中传递的数据设置文件的日期和时间.

我想我错过了什么,因为我的代码没有处理提取跨越的CAB文件......有关如何做到这一点的任何想法?

Zoë*_*son 6

你可能遇到的FDICopy只读取你传入的cab.它将fdintNEXT_CABINET用于为你提取的任何文件获取跨区数据fdintCOPY_FILE,但它只调用fdintCOPY_FILE从第一个cab开始的文件.

要获取整个集的目录列表,您需要在循环中调用FDICopy.每次收到fdintCABINET_INFO活动时,请保存psz1参数(下一个出租车名称).当FDICopy返回时,检查一下.如果它是一个空字符串你就完成了,如果没有再次调用FDICopy,下一个cab作为新路径.


fdintCABINET_INFO:唯一的责任是返回0继续处理.您可以使用提供的信息(下一个机柜的路径,下一个磁盘,路径名,nad集ID),但您不需要.

fdintPARTIAL_FILE:根据您处理驾驶室的方式,您可能会忽略这一点.您只会在一组中看到第二张及以后的图像,并告诉您特定条目是从之前的驾驶室继续进行的.如果你从集合中的第一个驾驶室开始,那么你已经看过fdintCOPY_FILE该档案了.如果你正在处理随机的.cabs,你也无法真正使用它,因为你没有要提取的文件的开头.

fdintNEXT_CABINET:您可以使用它来提示用户输入下一个文件柜的新目录,但是对于简单的跨区支持,如果传入的文件名有效则返回0,否则返回-1.如果你返回0并且驾驶室无效,或者是错误的,则会再次调用.最简单的方法(如果你不请求新的磁盘/目录),就是检查pfdin^.fdie.如果它是FDIError_None它等于第一次为请求的cab调用,所以你可以返回0.如果它是其他任何东西它已经尝试至少打开一次请求的cab,所以你可以返回-1作为错误.

fdintENUMERATE:我想你可以忽略这一点.它没有在文档中介绍,我看过的两个cab库不使用它.它可能是以前API版本的剩余部分.