【问题标题】:If FindNextUrlCacheEntry() fails, how can I retrieve info of the failed entry again?如果 FindNextUrlCacheEntry() 失败,如何再次检索失败条目的信息?
【发布时间】:2009-06-19 10:08:57
【问题描述】:

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

【问题讨论】:

  • 我遇到了同样的问题,有没有我可以分配的最大尺寸以避免ERROR_INSUFFICIENT_BUFFER

标签: caching wininet


【解决方案1】:

我在 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 倍的情况。

【讨论】:

  • 我也经历过。我只是分配(再次)返回的新大小,这似乎适用于随后对FindNextUrlCacheEntry() 的调用你知道为什么返回不同的大小吗?
【解决方案2】:

不管怎样,这似乎在 Vista 中得到了解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多