15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Удаляем 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;
}