2009-06-19 108 views
3

我在調用FindNextUrlCacheEntry()時遇到了ERROR_INSUFFICIENT_BUFFER錯誤。然後我想使用放大的緩衝區再次檢索失敗的條目。但我發現當我調用FindNextUrlCacheEntry()時,似乎我正在檢索失敗條目旁邊的那個。我有什麼方法可以返回來檢索剛剛失敗的條目的信息嗎?如果FindNextUrlCacheEntry()失敗,如何再次檢索失敗條目的信息?

+0

我看到了同樣的問題,爲避免出現`ERROR_INSUFFICIENT_BUFFER`,我可以分配一個最大大小嗎? – Motti 2009-11-18 14:09:49

回答

0

爲什麼它值得這似乎是在Vista中解決。

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和cacheEntryInfo BufferSizeInitial參數設置等於檢索緩存條目所需的緩衝區大小(以字節爲單位)。在分配所需的大小(cacheEntryInfoBufferSizeInitial)後,我再次調用相同的WinInet API,期望它在此次成功檢索條目。但有時它會失敗。我發現即使具有所需的緩衝大小(僅由其確定),API仍會失敗,因爲它需要更多字節,然後再檢索它以前的內容。多數情況下,差異只有幾個字節,但我也看到差異幾乎是4到5倍的情況。

+0

我也經歷過這個。我只是簡單地分配(再一次)返回的NEW大小,這似乎適用於後續調用FindNextUrlCacheEntry()`你有沒有想過爲什麼返回不同的大小? – 2014-01-13 16:34:27