zoukankan      html  css  js  c++  java
  • C#从IE缓存读取图片

    如果用HttpWebRequest和HttpWebResponse从服务器取图片,会触发图片变化。于是想到从IE缓存读取图片

    参考https://www.cnblogs.com/yelaiju/archive/2010/10/01/1839860.html和https://blog.csdn.net/annkie/article/details/6065521http://www.mamicode.com/info-detail-370382.html

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    
    namespace Common
    {
        class Program
        {//从IE缓存复制图片到D盘
            static void Main(string[] args)
            {            
                System.Diagnostics.Process.Start(" http://www.baidu.com ");
                System.Threading.Thread.Sleep(2000);           
                //打开IE缓存目录
                Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache));            
                IECache i = new IECache();
                //在网页上找到百度logo图片的url写在下面
                string b = i.GetPathForCachedFile("https://www.baidu.com/img/bd_logo1.png");
                Console.WriteLine(b);
                //从缓存中将bd_logo1.png拷贝到D盘下
                File.Copy(b, @"d:d_logo1.png", true);
                Console.WriteLine("现在打开D盘目录看看bd_logo1.png吧");
                Console.ReadKey();
    
    
            }
            public class IECache
            {
                [DllImport("Wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
                public static extern Boolean GetUrlCacheEntryInfo(String lpxaUrlName, IntPtr lpCacheEntryInfo, ref int lpdwCacheEntryInfoBufferSize);
                const int ERROR_FILE_NOT_FOUND = 0x2;
                struct LPINTERNET_CACHE_ENTRY_INFO
                {
                    public int dwStructSize;
                    IntPtr lpszSourceUrlName;
                    public IntPtr lpszLocalFileName;
                   // int CacheEntryType;
                   // int dwUseCount;
                   // int dwHitRate;
                    //int dwSizeLow;
                   // int dwSizeHigh;
    
                    //System.Runtime.InteropServices.ComTypes.FILETIME LastModifiedTime;
                    //System.Runtime.InteropServices.ComTypes.FILETIME Expiretime;
                   // System.Runtime.InteropServices.ComTypes.FILETIME LastAccessTime;
                    //System.Runtime.InteropServices.ComTypes.FILETIME LastSyncTime;
                    //IntPtr lpHeaderInfo;
                    //readonly int dwheaderInfoSize;
                    //IntPtr lpszFileExtension;
                    //int dwEemptDelta;
                }
                // 返回 指定URL文件的缓存在本地文件系统中的路径
                public string GetPathForCachedFile(string fileUrl)
                {
                    int cacheEntryInfoBufferSize = 0;
                    IntPtr cacheEntryInfoBuffer = IntPtr.Zero;
                    int lastError; Boolean result;
                    try
                    {
                        result = GetUrlCacheEntryInfo(fileUrl, IntPtr.Zero, ref cacheEntryInfoBufferSize);
                        lastError = Marshal.GetLastWin32Error();
                        if (result == false)
                        {
                            if (lastError == ERROR_FILE_NOT_FOUND)
                                return null;
                        }
                        cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize);
                        result = GetUrlCacheEntryInfo(fileUrl, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSize);
                        lastError = Marshal.GetLastWin32Error();
                        if (result == true)
                        {
                            Object strObj = Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof(LPINTERNET_CACHE_ENTRY_INFO));
                            LPINTERNET_CACHE_ENTRY_INFO internetCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO)strObj;
                            String localFileName = Marshal.PtrToStringAuto(internetCacheEntry.lpszLocalFileName); return localFileName;
                        }
                        else
                            return null;// file not found
                    }
                    finally
                    {
                        if (!cacheEntryInfoBuffer.Equals(IntPtr.Zero))
                            Marshal.FreeHGlobal(cacheEntryInfoBuffer);
                    }
                }
            }
        }
    }
  • 相关阅读:
    java操作生成jar包 和写入jar包
    jboss配置jndi连接池
    windows 域的LDAP查询相关举例
    LDAP error Code 及解决方法
    HDU 6417
    CF1299D Around the World
    codechef Chef and The Colored Grid
    Educational Codeforces Round 82 (Rated for Div. 2)
    CF1237F Balanced Domino Placements
    CF1254E Send Tree to Charlie
  • 原文地址:https://www.cnblogs.com/pu369/p/9951541.html
Copyright © 2011-2022 走看看