分享
 
 
 

用 C# 获取 IE 临时文件

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

大家知道,在我们访问一个网站的时候。系统会把这个网站上的图片,动画等内容全部缓存到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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有