首页 > 编程资源分享区 > C/C++源代码共享 > 如何编程清除IE的临时文件
2006
07-05

如何编程清除IE的临时文件

[问题提出]
有时候需要在程序中实现清除IE临时文件的功能,该功能如何实现呢?

[解决方法]
win32 internet 函数为我们提供了许多URL Cache支持函数,可以在MSDN里用Persistent URL Cache Functions找到。在这里我们只要调用如下的函数就可以实现IE临时文件的清除功能!
函数如下:
#include <wininet.h>
#include <UrlHist.h>
#include <SHLGUID.H>
#include <OBJBASE.H>

BOOL DelTempFiles()
{
    BOOL bResult = FALSE;
    BOOL bDone = FALSE;
    LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;  

    DWORD  dwTrySize, dwEntrySize = 4096; // start buffer size    
    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; // use new size returned
                 }
                 break;

              // we are done
             case ERROR_NO_MORE_ITEMS:
                 bDone = TRUE;
                 bResult = TRUE;                  
                 break;

              // we have got an entry
             case ERROR_SUCCESS:                         
        
                  // don’t delete cookie entry
                 if (!(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY))                  
                   
                  DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);
                      
                  // get ready for next entry
                 dwTrySize = dwEntrySize;
                 if (FindNextUrlCacheEntry(hCacheDir, lpCacheEntry, &dwTrySize))
                      dwError = ERROR_SUCCESS;          
    
                 else
                 {
                      dwError = GetLastError();
                      dwEntrySize = dwTrySize; // use new size returned
                 }                       
                 break;

             // unknown error
             default:
                 bDone = TRUE;                  
                 break;
        }

        if (bDone)
        {  
             delete [] lpCacheEntry;
             if (hCacheDir)
                 FindCloseUrlCache(hCacheDir);        
                                     
        }
    } while (!bDone);
    return bResult;
}


留下一个回复