ERROR_INSUFFICIENT_BUFFER
调用时出现错误FindNextUrlCacheEntry()
。然后我想使用扩大的缓冲区再次检索失败的条目。但是我发现当我调用 时FindNextUrlCacheEntry()
,似乎我正在检索失败条目旁边的那个。有什么方法我可以回去检索刚刚失败的条目的信息吗?
2 回答
我还在 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 倍的情况。
对于它的价值,这似乎在 Vista 中得到了解决。