缓存(二)

获取缓存条目流

RetrieveUrlCacheEntryStreamReadUrlCacheEntryStreamUnlockUrlCacheEntryStream用于获取缓存中的资源。

RetrieveUrlCacheEntryStream接受一个URL,一个用于存储INTERNET_CACHE_ENTRY_INFO结构体的缓冲区及其尺寸和一个表明是否可以进行随机读取的布尔值。如果找到了缓存文件,函数会创建到文件的句柄。函数不做URL解析,所以对于含有锚定(#)的URL,即使资源在缓存中,它也找不到。比如说,如果传入 http://example.com/example.htm#sample,即使它在缓存中,函数也会返回ERROR_FILE_NOT_FOUND

ReadUrlCacheEntryStream要求传入RetrieveUrlCacheEntryStream创建的句柄、文件偏移量、缓冲区及其尺寸。如果缓冲区不足以容纳可用数据,函数调用会失败,GetLastError返回ERROR_INSUFFICIENT_BUFFER,缓冲区尺寸参数会被设置为下载资源所需缓冲区大小。

获取缓存文件后,应该调用UnlockUrlCacheEntryStream关闭RetrieveUrlCacheEntryStream创建的句柄。

下面的例子显示指定URL的缓存条目中存储的信息。函数在IDC_CacheDump编辑框中显示文本资源,其他类型的资源不显示。

<…… 省略示例代码 ……>

获取缓存条目文件

对于要求某资源的文件名才能的启动的应用程序,可使用RetrieveUrlCacheEntryFileUnlockUrlCacheEntryFile函数。不要求文件名的程序应该使用RetrieveUrlCacheEntryStreamReadUrlCacheEntryStreamUnlockUrlCacheEntryStream获取缓存信息。

RetrieveUrlCacheEntryFile接受一个URL和用于保存INTERNET_CACHE_ENTRY_INFO结构体的缓冲区及其尺寸,为调用者获取并锁定缓存文件。

使用完缓存文件后,应该调用UnlockUrlCacheEntryFile解锁文件。

缓存组

要创建缓存组,必须调用CreateUrlCacheGroup为其生成一个GROUPID。使用SetUrlCacheEntryGroup函数,提供缓存条目的URL和INTERNET_CACHE_GROUP_ADD标志就可以把条目加入到缓存组中。要从缓存组中删除条目,则传入条目的URL,使用INTERNET_CACHE_GROUP_REMOVE标志。

FindFirstUrlCacheEntryExFindNextUrlCacheEntryEx函数可以枚举指定缓存组中的条目。完成枚举后,应该用FindCloseUrlCache关闭枚举句柄。

处理具有可变大小信息的结构体

对于每个存储的URL,缓存有不同大小的信息,INTERNET_CACHE_ENTRY_INFO结构体就反映了这一点。缓存函数返回这个结构体时,创建的缓冲区大小总是INTERNET_CACHE_ENTRY_INFO的大小加可变的信息大小。如果指针成员不为空,则它指向结构体之后。在复制缓冲区的时候,应该让指针成员指向新缓冲区的合适位置,如下所示:

<…… 省略示例代码 ……>

如果给定的缓冲区不足以容纳返回的缓存条目信息,一些缓存函数调用会以ERROR_INSUFFICIENT_BUFFER错误失败。此时,函数也会返回所需的缓存大小。这时就可以分配合适大小的缓存,然后重新调用函数。


菊子曰 这就是 菊子曰啦!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值