본문 바로가기
C & C++/MFC Network

[IP] 인터넷 임시파일 삭제

by izen8 2011. 4. 14.
반응형

참고자료 : http://support.microsoft.com/default.aspx?scid=kb%3Bko%3B262110

 

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;


반응형

댓글