CAB文件API澄清

时间:2011-08-26 08:07:27

标签: delphi winapi cab

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

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

我认为我遗漏了一些东西,因为我的代码没有处理提取跨越的CAB文件...有关如何执行此操作的任何想法?

1 个答案:

答案 0 :(得分:6)

您可能遇到的是 FDICopy 仅读取您传入的cab。它将使用fdintNEXT_CABINET获取您为响应时提取的任何文件的跨区数据fdintCOPY_FILE,但只会调用fdintCOPY_FILE来查看从第一个出租车开始的文件。

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


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

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

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

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