を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
上記の呼び出しは、INSUFFICIENT_BUFFER としてのエラー番号と、キャッシュ エントリを取得するために必要なバッファーのサイズ (バイト単位) に等しい cacheEntryInfoBufferSizeInitial パラメーターを設定して、false を返します。必要なサイズ (cacheEntryInfoBufferSizeInitial) を割り当てた後、今度はエントリが正常に取得されることを期待して、同じ WinInet API を再度呼び出します。しかし、時には失敗します。以前に取得したものよりも多くのバイトが必要であるため、必要なバッファリングされたサイズ (それのみが決定された) であっても、API が再び失敗するケースがあることがわかります。ほとんどの場合、違いは数バイトですが、違いがほぼ 4 ~ 5 倍になるケースも見てきました。
これは、Vista では解決されているようです。