caching - 如果 FindNextUrlCacheEntry() 失败,我如何重新检索失败条目的信息?

标签 caching wininet

我在调用 FindNextUrlCacheEntry() 时遇到了 ERROR_INSUFFICIENT_BUFFER 错误。然后我想使用扩大的缓冲区再次检索失败的条目。但我发现,当我调用 FindNextUrlCacheEntry() 时,似乎我正在检索失败条目旁边的条目。有什么办法可以回溯到刚刚失败的条目的信息吗?

最佳答案

我也在 XP 上观察到相同的行为。我正在尝试使用 WinInet API 以编程方式清除 IE 缓存。以下 MSDN 链接中的代码在 Win7/Vista 上运行良好,但在 XP 上批量删除缓存文件(多次运行)。在调试时,我发现 API FindNextUrlCacheEntry 在多次执行时为同一条目提供不同的大小。

MSDN 链接:http://support.microsoft.com/kb/815718

这是我正在做的:

首先,我进行调用以确定下一个 URL 条目的大小

fSuccess = FindNextUrlCacheEntry(hCacheHandle, 0, &cacheEntryInfoBufferSizeInitial)//此时cacheEntryInfoBufferSizeInitial = 0

上述调用返回 false,错误号为 INSUFFICIENT_BUFFER,并且 cacheEntryInfoBufferSizeInitial 参数设置为等于检索缓存条目所需的缓冲区大小(以字节为单位)。分配所需大小 (cacheEntryInfoBufferSizeInitial) 后,我再次调用相同的 WinInet API,希望它这次能够成功检索条目。但有时它会失败。我看到 API 再次失败的情况,即使具有所需的缓冲大小(仅根据确定的大小),因为它需要比之前检索到的更多的字节。大多数时候差异只有几个字节,但我也看到过差异几乎是 4 到 5 倍的情况。

关于caching - 如果 FindNextUrlCacheEntry() 失败,我如何重新检索失败条目的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1017251/

相关文章:

delphi - InternetReadFile 的常见平均缓冲区大小是多少?

caching - 适用于大型网站的 AppFabric 缓存

mysql - ServiceStack Ormlite 缓存条目在到期后不会被删除

c++ - 无法以编程方式确定我的应用程序使用哪个 TLS 版本

c++ - 返回无效状态代码的 WinInet HttpQuery 信息

c++ - 使用wininet的异步请求

c++ - 当两个以上的下载已经在进行中时,HttpSendRequest 阻塞

http - 提供身份验证时,代理会缓存 HTTP 响应吗?

asp.net - 重新启动 Web 应用程序时如何重置 IIS(或以其他方式清除缓存)?

django - 如何在 Django 中通过 HTTPResponse 返回缓存的 JSON 数据?