본문 바로가기
IT-개발,DB

[개발/vc++] 인터넷 임시파일 삭제

by SB리치퍼슨 2011. 12. 22.
[개발/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;

반응형

댓글