Удаляем Temporary Internet Files

В 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;
}

 
« Предыдущая статья   Следующая статья »