首页 > 代码库 > C# 读取IE缓存文件(2)

C# 读取IE缓存文件(2)

   private void button1_Click(object sender, EventArgs e)        {            int nNeeded = 0, nBufSize;            IntPtr buf;            INTERNET_CACHE_ENTRY_INFO CacheItem;            IntPtr hEnum;            bool r;            FindFirstUrlCacheEntry(null, IntPtr.Zero, ref nNeeded);            if (Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS)                return;            nBufSize = nNeeded;            buf = Marshal.AllocHGlobal(nBufSize);            hEnum = FindFirstUrlCacheEntry(null, buf, ref nNeeded);            var sb = new StringBuilder();            while (true)            {                CacheItem = (INTERNET_CACHE_ENTRY_INFO) Marshal.PtrToStructure(buf,typeof (INTERNET_CACHE_ENTRY_INFO));                    string url = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName);                if (url.Contains("mp.weixin.qq.com/misc/getheadimg"))                {                    string modifiedTime = FILETIMEtoDataTime(CacheItem.LastModifiedTime);                    string expireTime = FILETIMEtoDataTime(CacheItem.ExpireTime);                    string accessTime = FILETIMEtoDataTime(CacheItem.LastAccessTime);                    string syncTime = FILETIMEtoDataTime(CacheItem.LastSyncTime);                    var LocalFileName = Marshal.PtrToStringAuto(CacheItem.lpszLocalFileName);                    sb.AppendFormat("\r\nUrl {0}", url);                    sb.AppendFormat("\r\n本地路径{0}",LocalFileName);                    if (!File.Exists(LocalFileName))                    {                    sb.AppendFormat("\r\n本地路径不存在!!!");                    }                    else                    {                    sb.AppendFormat("\r\nmodifiedTime {0}", modifiedTime);                    sb.AppendFormat("\r\n expireTime {0}", expireTime);                    sb.AppendFormat("\r\n accessTime {0}",accessTime );                    sb.AppendFormat("\r\n syncTime {0}", syncTime);                        var id = Util.GetMatchValue(url, @"fakeid\=(\d+)");                    var path = @"c:\1\" + id + ".jpg";                    if (!File.Exists(path))                    {                                                File.Copy(LocalFileName, path);                    }                    }                    //    pictureBox1.Image = GetThumbnail(LocalFileName);                    //if (s.Contains(textBox1.Text))                    //{                    //}                }                nNeeded = nBufSize;                r = FindNextUrlCacheEntry(hEnum, buf, ref nNeeded);                if (!r && Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS)                    break;                if (!r && nNeeded > nBufSize)                {                    nBufSize = nNeeded;                    buf = Marshal.ReAllocHGlobal(buf, (IntPtr) nBufSize);                    FindNextUrlCacheEntry(hEnum, buf, ref nNeeded);                }            }            Util.Log(sb);            MessageBox.Show("系统数据加载完毕!");            Marshal.FreeHGlobal(buf);        }        #region MyRegion        #region 引入dll        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]        public struct INTERNET_CACHE_ENTRY_INFO        {            public int dwStructSize;            public IntPtr lpszSourceUrlName;            public IntPtr lpszLocalFileName;            public int CacheEntryType;            public int dwUseCount;            public int dwHitRate;            public int dwSizeLow;            public int dwSizeHigh;            public FILETIME LastModifiedTime;            public FILETIME ExpireTime;            public FILETIME LastAccessTime;            public FILETIME LastSyncTime;            public IntPtr lpHeaderInfo;            public int dwHeaderInfoSize;            public IntPtr lpszFileExtension;            public int dwExemptDelta;        }        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]        public struct SYSTEMTIME        {            public short wYear;            public short wMonth;            public short wDayOfWeek;            public short wDay;            public short wHour;            public short wMinute;            public short wSecond;            public short wMilliseconds;        }        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]        public static extern int FileTimeToSystemTime(IntPtr lpFileTime,IntPtr lpSystemTime);        [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]        public static extern IntPtr FindFirstUrlCacheEntry([MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern,IntPtr lpFirstCacheEntryInfo,ref int lpdwFirstCacheEntryInfoBufferSize);        [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]        public static extern bool FindNextUrlCacheEntry(IntPtr hEnumHandle,IntPtr lpNextCacheEntryInfo,ref int lpdwNextCacheEntryInfoBufferSize);        [DllImport("wininet.dll")]        public static extern bool FindCloseUrlCache(        IntPtr hEnumHandle);        const int ERROR_NO_MORE_ITEMS = 259;        #endregion        #region FileTimeToSystemTime        private string FILETIMEtoDataTime(FILETIME time)        {            IntPtr filetime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(FILETIME)));            IntPtr systime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SYSTEMTIME)));            Marshal.StructureToPtr(time, filetime, true);            FileTimeToSystemTime(filetime, systime);            SYSTEMTIME st = (SYSTEMTIME)Marshal.PtrToStructure(systime, typeof(SYSTEMTIME));            string Time = st.wYear+"-" + st.wMonth+"-" + st.wDay+" " + st.wHour+":" + st.wMinute+":" + st.wSecond;            return Time;        }        #endregion         #endregion

 

C# 读取IE缓存文件(2)