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
时间: 2024-08-04 15:32:27

C# 读取IE缓存文件(2)的相关文章

php实现数据库数据读取生成缓存文件

有些时候我们希望减少对数据库的 查询来提高程序的性能,因为这些数据不是经常变更的,而是会在很长一段时间内都不会变化,因此,我们每连接一次数据库,都会把相应的结果用文件的形式保存 起来.比如对于一个商城来说,我们的商品的数量可能会经常变,但是我们的商品类型以及商品的价格这些东西都会在很长的一段时间内不会变更,如果我们需要频 繁的查询它们的时候,就可以使用数据库缓存技术. 缓存的原因 第一点首先看我们普通情况下执行一条SQL查询的开销,我们先连接数据库,然后准备SQL查询,接下来发送查询信息,然后取

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

using System; using System.Runtime.InteropServices; namespace Common { public class IECache { [DllImport("Wininet.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern Boolean GetUrlCacheEntryInfo(String lpxaUrlName, IntPtr lp

9大浏览器端缓存机制分析

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

Java缓存学习之二:浏览器缓存机制

浏览器端的九种缓存机制介绍 浏览器缓存是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件还是从

9中浏览器端缓存

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制.    一.http缓存   http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器

VS调试经常打断点打上之后没反应的问题

在调试的时候经常会发现打了断点但是始终不进到程序中来,这是因为访问的这个页面在服务器中有缓存,也就是在iis中产生了缓存.访问的时候直接进到读取的缓存文件, 根本没有读取项目文件,所以打了断点肯定进不来的. 清楚iis缓存的方法 第一步:打开 IIS 配置管理工具(Internet 信息服务(IIS)管理器).选中一个网站(如果您想为所有站点配置,请选择点中“网站”那个图标),点“属性”按钮,会弹出一个配置窗口 第二步:选择“HTTP 头” TAB 标签,然后您会看到:“自定义 HTTP 头”这

Hadoop DistributedCache分布式缓存的使用

做项目的时候遇到一个问题,在Mapper和Reducer方法中处理目标数据时,先要去检索和匹配一个已存在的标签库,再对所处理的字段打标签.因为标签库不是很大,没必要用HBase.我的实现方法是把标签库存储成HDFS上的文件,用分布式缓存存储,这样让每个slave都能读取到这个文件. main方法中的配置: //分布式缓存要存储的文件路径 String cachePath[] = { "hdfs://10.105.32.57:8020/user/ad-data/tag/tag-set.csv&qu

Servlet源码解析:Servlet接口及其重要子类

 Servlet是基于Java技术的,容器托管的,用于生成动态内容的web组件.Servlet接口是Java Servlet API的核心抽象.首先我们来看看它的源码: public interface Servlet { /** * 被servlet容器在实例化servlet后调用该方法表示该servlet已经被装载,以服务的形式提供给客户 * @param config * @throws ServletException */ public void init(ServletConfi

九种浏览器端缓存机制知多少(转)

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件