大家知道,在我们访问一个网站的时候。系统会把这个网站上的图片,动画等内容全部缓存到Internet临时文件夹中。
我们可以通过 <Drives>:/Documents and Settings/<user>/Local Settings/Temporary Internet Files访问。但是可能我们都没有想到,里面的文件实际却不同于我们系统中其他的文件夹和文件的关系。

举例说明,我们在VS.net下写一个函数来返回指定文件夹中的文件夹和所有文件时,但我们把Internet临时文件夹的地址传进去时,系统只会返回一个文件,那就是desktop.ini(每个文件夹都有),还有一个隐藏的文件夹。所以这就证明了在临时文件夹中的文件并不是按照普通的文件夹与文件的方式存在的。

其实windows是把临时文件全部存在一个隐藏的文件夹中,这个文件夹是我们都看不到的,然后靠一个index.dat的索引把内容全部读出来回显给用户。

那我们怎么用程序来读取其中的内容呢? 
首先要引用一个user.dll,在系统文件夹中。然后利用它其中的一些函数就可以遍历整个文件夹,并获得其中每个文件的信息。

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

引入以上三个函数来遍历临时文件夹,然后再引用

[DllImport("kernel32.dll",SetLastError=true, CharSet=CharSet.Auto)]
public static extern int FileTimeToSystemTime(
IntPtr lpFileTime,
IntPtr lpSystemTime);

用来把 FileTime时间格式转化成c#中的string类型,以便我们进一步操作。

主体程序如下:

#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.ToString()+"."+st.wMonth.ToString()+"."+st.wDay.ToString()+"."+st.wHour.ToString()+"."+st.wMinute.ToString()+"."+st.wSecond.ToString();
return Time;
}

#endregion

#region 加载数据
private void FileOk_Click(object sender, System.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 );
while ( true )
{
CacheItem = (INTERNET_CACHE_ENTRY_INFO) Marshal.PtrToStructure( buf,
typeof(INTERNET_CACHE_ENTRY_INFO) );

string modifiedTime = FILETIMEtoDataTime(CacheItem.LastModifiedTime);
string expireTime = FILETIMEtoDataTime(CacheItem.ExpireTime);
string accessTime = FILETIMEtoDataTime(CacheItem.LastAccessTime);
string syncTime = FILETIMEtoDataTime(CacheItem.LastSyncTime);

#region 获得数据,存入数据库
try
{

//此處遍歷CacheItem即可
//例如
string s = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName);
}
catch
{
//異常處理
}
#endregion

string s = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName);

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

MessageBox.Show("系统数据加载完毕!");
Marshal.FreeHGlobal( buf );

}

#endregion

C# 获取 IE 临时文件相关推荐

  1. java获取该临时文件的Path File.createTempFile(script, .sh);

    使用 File.createTempFile("script", ".sh") 可以在系统的临时目录中创建一个名为 script.sh 的临时文件.可以使用该文 ...

  2. java获取tomcat临时文件夹路径

    /** 生成execl文件路径,tomcat临时文件夹temp  **/ String path = request.getSession().getServletContext().getRealP ...

  3. 获取用户临时文件夹路径

    对文件操作,需要将文件临时存储在当前用户临时文件夹中: class Bt{public void LocalTempPath(){var tempPath = System.IO.Path.GetTe ...

  4. C# 如何获取用户临时文件夹路径

    System.IO.Path.GetTempPath();

  5. C# 系统应用之清除Cookies、IE临时文件、历史记录 转载

    http://blog.csdn.net/Eastmount/article/details/18821221 本文主要是项目"个人电脑使用记录清除软件"系类文章中关于清除浏览器C ...

  6. C# 系统应用之清除Cookies、IE临时文件、历史记录

    本文主要是项目"个人电脑使用记录清除软件"系类文章中关于清除浏览器Cookies.IE临时文件.最近使用历史记录等内容.该篇文章的基本思想路线是首先了解上网历史记录的Windows ...

  7. C# Windows获取系统路径汇总

    获取操作系统路径汇总(红色为常用) string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) ...

  8. C#通过Windows API捕获窗,获取窗口文本(FindWindow、GetWindowText),附录:Windows窗口消息大全、Windows API大全

    文章目录 一.前言 二.使用Spy++工具分析窗口 三.C#通过Windows API捕获窗口,获取窗口文本 四.附录:Windows窗口消息 五.Windows API大全 1.API之网络函数 2 ...

  9. Windows API函数大全

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...

最新文章

  1. 【rnnoise源码分析】compute_frame_feature函数
  2. swift和python语法区别_Swift 基本语法
  3. springboot使用maven打包无法打进本地包解决方法
  4. zabbix------监控H3C MSR路由器
  5. php soap 用户名密码,PHP SOAP客户端帮助!
  6. 八大排序:Java实现八大排序及算法复杂度分析
  7. 信息学奥赛C++语言:数字三角形2
  8. 一起学习C语言:C语言循环结构(二)
  9. java 获取视频信息_Java获取视频参数信息
  10. jQuery初识 - jQuery中的方法
  11. poj 1695 动态规划
  12. jsp实现简易购物车
  13. 怎样把pdf转换成word-多语言ocr支持
  14. 使用163邮箱+Python3.6 发送邮件/批量发送邮件
  15. 【Base64是什么?】
  16. 径向渐变加阴影html,CSS3 径向渐变(radial-gradient)
  17. 老毛挑U盘系统工具——ghost系统安装教程
  18. Goland嗖嗖的: 快捷键,自动生成代码等效率小技巧
  19. 无尽神域服务器维护,无尽神域辅助介绍_脚本功能大全
  20. 数学之美:数学究竟是如何深入我们的生活

热门文章

  1. html表格中加入斜线,在HTML中显示带斜线的表格
  2. java邮件接收代码,JavaMail入门第四篇 接收邮件(示例代码)
  3. 织梦生成html加速,加快DEDECMS静态html网页生成速度的方法
  4. h5 video视频播放的同时加水印,图片加水印同样的原理
  5. 抖音的标题写什么内容_看了这篇文章,我才真正明白什么才是英语速成之路!感恩...
  6. 在CentOS 6.3 64bit上安装最新版tsar并监控ATS 5.3
  7. Blender三维建筑场景动画制作学习教程
  8. SYNCHRO 4D可视化调度学习教程 SYNCHRO 4D: Visual Scheduling
  9. Unity Android 2021:用C#打造3D ZigZag赛车游戏
  10. 34种墨西哥植物模型 Globe Plants – Bundle 34 Mexican Plants