由于我在任何地方都看不到任何内容不指向关于这个问题的原始Microsoft文档,或者源代码似乎真的不能回答我的问题,所以我想我可能会在这里问一些事情。(Delphi标签在那里是因为我的开发环境就是我从这里生成的代码)
也就是说,我有几个API文档没有回答的问题。第一个: fdi_notify消息。在编写这些代码时,“我的责任”是什么:fdintCABINET_INFO: fdintPARTIAL_FILE: fdintNEXT_CABINET: fdintENUMERATE:?我将通过一个例子来说明我的意思。对于fdintCLOSE_FILE_INFO,“我的职责”是关闭一个与handle相关的文件,并根据fdi_notify中传递的数据设置文件的日期和时间。
我认为我遗漏了一些东西,因为我的代码没有处理提取跨区CAB files...any的想法如何做?
发布于 2011-08-26 23:27:29
您很可能遇到的是FDICopy只读取您传入的出租车。它将使用fdintNEXT_CABINET获取您为响应fdintCOPY_FILE而提取任何文件的跨区数据,但它只为在第一个cab上启动的文件调用fdintCOPY_FILE。
要获得整个集合的目录列表,需要在循环中调用FDICopy。每次获得fdintCABINET_INFO事件时,保存psz1参数(下一个cab名称)。当FDICopy返回时,检查这一点。如果它是一个空字符串,那么就结束了,如果不是,就用下一个cab作为新路径再次调用FDICopy。
fdintCABINET_INFO:对此的唯一责任是返回0以继续处理。您可以使用提供的信息(下一个文件柜的路径、下一个磁盘、路径名、nad集ID),但您不需要这样做。
fdintPARTIAL_FILE:根据您处理出租车的方式,您可能可以忽略这一点。您将只在一个集合中的第二个或更晚的图像中看到它,它是为了告诉您该特定条目是从上一辆出租车中继续的。如果您从集合中的第一个cab开始,您将已经看到该文件的fdintCOPY_FILE。如果你正在处理随机的.cabs,你也不能真正使用它,因为你没有文件的开始部分来提取。
fdintNEXT_CABINET:您可以使用它来提示用户为下一个文件柜输入一个新目录,但是对于简单的跨转支持,如果传入的文件名有效,则返回0;如果传入的文件名无效,则返回-1。如果您返回0,并且cab无效,或者是错误的cab,则将再次调用它。最简单的方法(如果您不请求新的磁盘/目录)就是检查pfdin^.fdie。如果它是FDIError_None,那么它等于被请求的cab的第一次被调用,所以你可以返回0。如果是其他原因,它至少已经尝试打开请求的cab一次,所以您可以将-1作为错误返回。
fdintENUMERATE:我认为你可以忽略这一点。文档中没有介绍它,并且我研究过的两个cab库都没有使用它。它可能是以前的API版本遗留下来的。
https://stackoverflow.com/questions/7201725
复制相似问题