천객만래 [千客萬來] (It has an interminable succession of visitors)

'인터넷 임시파일 삭제'에 해당되는 글 2건

  1. 2011.12.22 [개발/vc++] 인터넷 임시파일 삭제
  2. 2011.12.02 [개발/MFC] 인터넷 임시파일 삭제하기
[개발/vc++] 인터넷 임시파일 삭제

출처: http://blog.naver.com/ratmsma?Redirect=Log&logNo=40026347055


WinInet API FindFirstURLCacheEntry()로 첫번째 캐시 항목을 찾고
FindNextUrlCacheEntry()로 캐시 전체를 나열.
DeleteUrlCacheGroup()로 각 항목 삭제
->얘들은 explorer 5이상만 사용->오류 방지
 
우선 wininet.lib 파일을 Link 해 주시구요.
 
 
다음 소스 코드를 참고해 주세요.
GetUrlCacheEntryInfo(..)
FindFirstUrlCacheEntry(..)
DeleteUrlCacheEntry(..)
참조

 
#include <wininet.h>
 
 
// 지우고 싶지 않은 파일을 명시할 수 있습니다.
// 다음 코드에서는 쿠키 파일을 삭제하지 않습니다.
// [see 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)
        {
            // 좀더 큰 버퍼가 필요하다.
            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;

Posted by SB패밀리
Header: Declared in Wininet.h.
Library: Use Wininet.lib.
 
 
    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);
                     AddEventToList(WBListBox, 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);

Posted by SB패밀리