C# 清空IE缓存

    技术2025-12-02  7

    以前工作中遇到个清空IE缓存的需求,当时找了很多资源,下面贴一段能用的,希忘能给别人帮助

     [代码来自互联网,所以要用就谨慎点用,你懂的............]

     

     

    using System;using System.Runtime.InteropServices;using System.IO;using System.Text.RegularExpressions;

    namespace ProWb1{    class DeleteCache    {        [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;        }

            [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);

            [DllImport(@"wininet",            SetLastError = true,            CharSet = CharSet.Auto,            EntryPoint = "FindNextUrlCacheGroup",            CallingConvention = CallingConvention.StdCall)]        public static extern bool FindNextUrlCacheGroup(            IntPtr hFind,            ref long lpGroupId,            IntPtr lpReserved);

            [DllImport(@"wininet",            SetLastError = true,            CharSet = CharSet.Auto,            EntryPoint = "DeleteUrlCacheGroup",            CallingConvention = CallingConvention.StdCall)]        public static extern bool DeleteUrlCacheGroup(            long GroupId,            int dwFlags,            IntPtr lpReserved);

            [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);

            [DllImport(@"wininet",            SetLastError = true,            CharSet = CharSet.Auto,            EntryPoint = "FindNextUrlCacheEntryA",            CallingConvention = CallingConvention.StdCall)]        public static extern bool FindNextUrlCacheEntry(            IntPtr hFind,            IntPtr lpNextCacheEntryInfo,            ref int lpdwNextCacheEntryInfoBufferSize);

            [DllImport(@"wininet",            SetLastError = true,            CharSet = CharSet.Auto,            EntryPoint = "DeleteUrlCacheEntryA",            CallingConvention = CallingConvention.StdCall)]        public static extern bool DeleteUrlCacheEntry(            IntPtr lpszUrlName);

            public static void Del(object _code)        {            const int CACHEGROUP_SEARCH_ALL = 0x0;            const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x2;            const int ERROR_FILE_NOT_FOUND = 0x2;            const int ERROR_NO_MORE_ITEMS = 259;            long groupId = 0;

                int cacheEntryInfoBufferSizeInitial = 0;            int cacheEntryInfoBufferSize = 0;            IntPtr cacheEntryInfoBuffer = IntPtr.Zero;            INTERNET_CACHE_ENTRY_INFOA internetCacheEntry;            IntPtr enumHandle = IntPtr.Zero;            bool returnValue = false;

                enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, ref groupId, IntPtr.Zero);            if (enumHandle != IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())                return;            while (true)            {                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;            }

                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);        }

        }}

     

    //Del();清空缓存

    最新回复(0)