Удаляем Temporary Internet Files
Автор: Peter Sun.
От Автора: В IE5, Вы можете удалить Temporary Internet Files в
"Internet Options" на закладке "Свойства". А Вам
никогда не хотелось, чтобы удалением Temporary Internet
Files занималось Ваше приложение? Данный пример
показывает - как это можно сделать с помощью WinInet
API-функций: FindFirstUrlCacheEntry, FindNextUrlCacheEntry, DeleteUrlCacheEntry, и
FindCloseUrlCache.
Они не документированы, но я попробовал, и они
работают в VC++ 6.0 на Win98/NT.
#include <wininet.h>
//
// Удаление всех файлов в папке Temporary Internet Files
//
// Внимание, данный пример не удаляет Кукисы
// [смотри if (!(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY))]
//
BOOL DelTempFiles()
{
BOOL bResult = FALSE;
BOOL bDone = FALSE;
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;
DWORD dwTrySize, dwEntrySize = 4096; // размер буфера
HANDLE hCacheDir = NULL;
DWORD dwError = ERROR_INSUFFICIENT_BUFFER;
do
{
switch (dwError)
{
// need a bigger buffer
case ERROR_INSUFFICIENT_BUFFER:
delete [] lpCacheEntry;
lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwEntrySize];
lpCacheEntry->dwStructSize = dwEntrySize;
dwTrySize = dwEntrySize;
BOOL bSuccess;
if (hCacheDir == NULL)
bSuccess = (hCacheDir
= FindFirstUrlCacheEntry(NULL, lpCacheEntry,
&dwTrySize)) != NULL;
else
bSuccess = FindNextUrlCacheEntry(hCacheDir, lpCacheEntry, &dwTrySize);
if (bSuccess)
dwError = ERROR_SUCCESS;
else
{
dwError = GetLastError();
dwEntrySize = dwTrySize; // возвращаем новый размер буфера
}
break;
// уже всё удалено
case ERROR_NO_MORE_ITEMS:
bDone = TRUE;
bResult = TRUE;
break;
// если нет ошибок
case ERROR_SUCCESS:
// кукисы не удалять
if (!(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY))
DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);
// Удаляем следующий элемент
dwTrySize = dwEntrySize;
if (FindNextUrlCacheEntry(hCacheDir, lpCacheEntry, &dwTrySize))
dwError = ERROR_SUCCESS;
else
{
dwError = GetLastError();
dwEntrySize = dwTrySize; // возвращаем новый размер буфера
}
break;
// по умолчанию
default:
bDone = TRUE;
break;
}
if (bDone)
{
delete [] lpCacheEntry;
if (hCacheDir)
FindCloseUrlCache(hCacheDir);
}
} while (!bDone);
return bResult;
}
|