如果用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();
//打开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:\bd_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 = ;
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);
}
}
}
}
}

最新文章

  1. ArcGIS Engine 刷新问题
  2. 工程BUG记录
  3. sql基础知识:分页+排序
  4. Jquery实际应用,判断radio,selelct,checkbox是否选中及选中的值
  5. P1026 统计单词个数
  6. 解决阿里云数据库RDS报错The table '/home/mysql/data3015/tmp/#sql_13975_23' is full
  7. Oracle外键不加索引会引起死锁问题
  8. 【Android】Kill Service
  9. cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测下
  10. ural1470 UFOs
  11. js中boolean类型的理解
  12. org.apache.jasper.JasperException: /pages/path.jsp
  13. Python爬虫实践 -- 记录我的第二只爬虫
  14. Kafka对Java程序员有多重要?连阿里都再用它处理亿万级数据统计
  15. 十四、JavaWeb监听器
  16. Winfon 页签切换及窗体控件自适应
  17. # 2018-2019-20175302实验一《Java开发环境的熟悉》实验报告
  18. 【学亮IT手记】angularJS+select2多选下拉框实例
  19. cds view join和association
  20. A Method for the Construction of Minimum-Redundancy Codes

热门文章

  1. 4.6 explain 之 rows
  2. 【读书笔记】iOS-使用GCD改善性能
  3. springboot 常用配置文件
  4. JAVA代码根据经纬度范围计算WGS84与谷歌全球墨卡托包含的切片数目与拼接图像像素尺寸
  5. Android图片的Base64编码与解码
  6. Android Studio 之 项目瘦身、代码检查
  7. Java判断一个字符是否是数字的几种方法的代码
  8. wap2app(二)-- 设置APP系统状态栏
  9. js的深层克隆和浅层克隆代码和理解
  10. exports与module.exports的区别,export与export.defult区别