출처 : http://support.microsoft.com/kb/326201/ko
이 문서에서는 WinInet 응용 프로그래밍 인터페이스 (API) 함수를 사용하여 직접 캐시를 지우는 방법을 설명합니다.
응용 프로그램에 WebBrowser 컨트롤을 호스팅하는 때 캐시를 프로그래밍 방식으로 선택을 할 수 있습니다. 그러나 이 기능은 WebBrowser 컨트롤의 인터페이스를 통해 사용할 수 없습니다.
참고: 이 함수를 사용하여 Microsoft Internet Explorer 5 사용할 수 있습니다. 따라서 오류를 방지하기 위해 이 문서의 코드 예제는 포함한 적절한 검사를 포함해야 합니다.
응용 프로그램에 WebBrowser 컨트롤을 호스팅하는 때 캐시를 프로그래밍 방식으로 선택을 할 수 있습니다. 그러나 이 기능은 WebBrowser 컨트롤의 인터페이스를 통해 사용할 수 없습니다.
WinInet 함수
직접 캐시를 지우려면 다음 WinInet 함수를 사용할 수 있습니다.- FindFirstURLCacheEntry 함수를 첫 번째 캐시 항목을 찾을 수 있습니다.
- FindNextUrlCacheEntry 함수를 캐시를 통해 열거할 수 있습니다.
- DeleteUrlCacheEntry 함수를 사용하여 각 항목을 삭제합니다.
참고: 이 함수를 사용하여 Microsoft Internet Explorer 5 사용할 수 있습니다. 따라서 오류를 방지하기 위해 이 문서의 코드 예제는 포함한 적절한 검사를 포함해야 합니다.
Visual C# .NET 캐시 지우기 단계
WinInet 함수를 Visual C# .NET에서 캐시에 있는 파일을 모두 선택을 사용하려면 다음 이 단계를 수행하십시오.- Microsoft Visual Studio .NET 시작하십시오.
- 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트 를 클릭하십시오.
- 새 프로젝트 대화 상자의 프로젝트 형식Visual C# 프로젝트 클릭한 다음 템플릿 에서 콘솔 응용 프로그램 을 누릅니다.
- Class1.cs 클래스에 다음 코드를 추가합니다:
using System; using System.Runtime.InteropServices; // Visual C# version of Q326201 namespace Q326201CS { // Class for deleting the cache. class DeleteCache { // For PInvoke: Contains information about an entry in the Internet cache [StructLayout(LayoutKind.Explicit, Size=80)] public struct INTERNET_CACHE_ENTRY_INFOA { [FieldOffset(0)] public uint dwStructSize; [FieldOffset(4)] public IntPtr lpszSourceUrlName; [FieldOffset(8)] public IntPtr lpszLocalFileName; [FieldOffset(12)] public uint CacheEntryType; [FieldOffset(16)] public uint dwUseCount; [FieldOffset(20)] public uint dwHitRate; [FieldOffset(24)] public uint dwSizeLow; [FieldOffset(28)] public uint dwSizeHigh; [FieldOffset(32)] public FILETIME LastModifiedTime; [FieldOffset(40)] public FILETIME ExpireTime; [FieldOffset(48)] public FILETIME LastAccessTime; [FieldOffset(56)] public FILETIME LastSyncTime; [FieldOffset(64)] public IntPtr lpHeaderInfo; [FieldOffset(68)] public uint dwHeaderInfoSize; [FieldOffset(72)] public IntPtr lpszFileExtension; [FieldOffset(76)] public uint dwReserved; [FieldOffset(76)] public uint dwExemptDelta; } // For PInvoke: Initiates the enumeration of the cache groups in the Internet cache [DllImport(@"wininet", SetLastError=true, CharSet=CharSet.Auto, EntryPoint="FindFirstUrlCacheGroup", CallingConvention=CallingConvention.StdCall)] public static extern IntPtr FindFirstUrlCacheGroup( int dwFlags, int dwFilter, IntPtr lpSearchCondition, int dwSearchCondition, ref long lpGroupId, IntPtr lpReserved); // For PInvoke: Retrieves the next cache group in a cache group enumeration [DllImport(@"wininet", SetLastError=true, CharSet=CharSet.Auto, EntryPoint="FindNextUrlCacheGroup", CallingConvention=CallingConvention.StdCall)] public static extern bool FindNextUrlCacheGroup( IntPtr hFind, ref long lpGroupId, IntPtr lpReserved); // For PInvoke: Releases the specified GROUPID and any associated state in the cache index file [DllImport(@"wininet", SetLastError=true, CharSet=CharSet.Auto, EntryPoint="DeleteUrlCacheGroup", CallingConvention=CallingConvention.StdCall)] public static extern bool DeleteUrlCacheGroup( long GroupId, int dwFlags, IntPtr lpReserved); // For PInvoke: Begins the enumeration of the Internet cache [DllImport(@"wininet", SetLastError=true, CharSet=CharSet.Auto, EntryPoint="FindFirstUrlCacheEntryA", CallingConvention=CallingConvention.StdCall)] public static extern IntPtr FindFirstUrlCacheEntry( [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern, IntPtr lpFirstCacheEntryInfo, ref int lpdwFirstCacheEntryInfoBufferSize); // For PInvoke: Retrieves the next entry in the Internet cache [DllImport(@"wininet", SetLastError=true, CharSet=CharSet.Auto, EntryPoint="FindNextUrlCacheEntryA", CallingConvention=CallingConvention.StdCall)] public static extern bool FindNextUrlCacheEntry( IntPtr hFind, IntPtr lpNextCacheEntryInfo, ref int lpdwNextCacheEntryInfoBufferSize); // For PInvoke: Removes the file that is associated with the source name from the cache, if the file exists [DllImport(@"wininet", SetLastError=true, CharSet=CharSet.Auto, EntryPoint="DeleteUrlCacheEntryA", CallingConvention=CallingConvention.StdCall)] public static extern bool DeleteUrlCacheEntry( IntPtr lpszUrlName); [STAThread] static void Main(string[] args) { // Indicates that all of the cache groups in the user's system should be enumerated const int CACHEGROUP_SEARCH_ALL = 0x0; // Indicates that all the cache entries that are associated with the cache group // should be deleted, unless the entry belongs to another cache group. const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x2; // File not found. const int ERROR_FILE_NOT_FOUND = 0x2; // No more items have been found. const int ERROR_NO_MORE_ITEMS = 259; // Pointer to a GROUPID variable long groupId = 0; // Local variables int cacheEntryInfoBufferSizeInitial = 0; int cacheEntryInfoBufferSize = 0; IntPtr cacheEntryInfoBuffer = IntPtr.Zero; INTERNET_CACHE_ENTRY_INFOA internetCacheEntry; IntPtr enumHandle = IntPtr.Zero; bool returnValue = false; // Delete the groups first. // Groups may not always exist on the system. // For more information, visit the following Microsoft Web site: // http://msdn.microsoft.com/library/?url=/workshop/networking/wininet/overview/cache.asp // By default, a URL does not belong to any group. Therefore, that cache may become // empty even when the CacheGroup APIs are not used because the existing URL does not belong to any group. enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, ref groupId, IntPtr.Zero); // If there are no items in the Cache, you are finished. if (enumHandle != IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error()) return; // Loop through Cache Group, and then delete entries. while(true) { // Delete a particular Cache Group. returnValue = DeleteUrlCacheGroup(groupId, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero); if (!returnValue && ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error()) { returnValue = FindNextUrlCacheGroup(enumHandle, ref groupId, IntPtr.Zero); } if (!returnValue && (ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error() || ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error())) break; } // Start to delete URLs that do not belong to any group. enumHandle = FindFirstUrlCacheEntry(null, IntPtr.Zero, ref cacheEntryInfoBufferSizeInitial); if (enumHandle == IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error()) return; cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial; cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize); enumHandle = FindFirstUrlCacheEntry(null, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial); while(true) { internetCacheEntry = (INTERNET_CACHE_ENTRY_INFOA)Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof(INTERNET_CACHE_ENTRY_INFOA)); cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize; returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName); if (!returnValue) { returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial); } if (!returnValue && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error()) { break; } if (!returnValue && cacheEntryInfoBufferSizeInitial > cacheEntryInfoBufferSize) { cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial; cacheEntryInfoBuffer = Marshal.ReAllocHGlobal(cacheEntryInfoBuffer, (IntPtr) cacheEntryInfoBufferSize); returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial); } } Marshal.FreeHGlobal(cacheEntryInfoBuffer); } } } - 컴파일 및 다음 프로젝트를 실행하십시오.
- 캐시에 임시 인터넷 파일을 삭제한 확인하려면 Microsoft Internet Explorer에서 다음과 같이 하십시오.
- 도구 메뉴에서 인터넷 옵션 을 클릭하십시오.
- 일반 탭의 임시 인터넷 파일 영역 설정 을 클릭하십시오.
- 파일 보기를 클릭하십시오. 모든 Internet Explorer 캐시 파일이 삭제되었음을 알 수 있습니다.
위로 가기