c# winform清空ie缓存的几种方法
很明显 IE的缓存在其目录中显示的并不是真正的文件所处的位置,文件的位置是在隐藏的文件夹中,而且这个隐藏的文件夹我们一般找不到.在网上几种清空缓存的方法,在此我一一把代码和处理的效果显示出来.供大家参考.
①.使用ie缓存路径来删除缓存的
1
2
3
4
5
6
7
8
9
10
11
|
string cachePath = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache); //获取缓存路径 DirectoryInfo di = new DirectoryInfo(cachePath); foreach (FileInfo fi in di.GetFiles( "*.*" , SearchOption.AllDirectories)) //遍历所有的文件夹 删除里面的文件 { try { fi.Delete(); } catch { } } |
效果:并没有真正的删除缓存文件.而且会出现很多异常,比如enguser.dat,index.dat,,,这些文件删除的时候会出现另一个程序还在使用的错误
②.调用winnet.dll 清理缓存 上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Rntime.InteropServices; using System.IO; namespace WpfClient.AppCode { public class ClearCache { [StructLayout(LayoutKind.Explicit, Size = 80,CharSet=CharSet.Auto)] protected struct INTERNET_CACHE_ENTRY_INFOA { [FieldOffset(0)] public uint dwStructSize; [FieldOffset(4)] public IntPtr lpszSourceUrlName; [FieldOffset(8)] public IntPtr lpszLocalFileName; [FieldOffset(12)] public uint CacheEntryType; [FieldOffset(16)] public uint dwUseCount; [FieldOffset(20)] public uint dwHitRate; [FieldOffset(24)] public uint dwSizeLow; [FieldOffset(28)] public uint dwSizeHigh; [FieldOffset(32)] public FILETIME LastModifiedTime; [FieldOffset(40)] public FILETIME ExpireTime; [FieldOffset(48)] public FILETIME LastAccessTime; [FieldOffset(56)] public FILETIME LastSyncTime; [FieldOffset(64)] public IntPtr lpHeaderInfo; [FieldOffset(68)] public uint dwHeaderInfoSize; [FieldOffset(72)] public IntPtr lpszFileExtension; [FieldOffset(76)] public uint dwReserved; [FieldOffset(76)] public uint dwExemptDelta; } // For PInvoke: Initiates the enumeration of the cache groups in the Internet cache [DllImport( @"wininet" , SetLastError = true , CharSet = CharSet.Auto, EntryPoint = "FindFirstUrlCacheGroup" , CallingConvention = CallingConvention.StdCall)] protected static extern IntPtr FindFirstUrlCacheGroup( int dwFlags, int dwFilter, IntPtr lpSearchCondition, int dwSearchCondition, ref long lpGroupId, IntPtr lpReserved); // For PInvoke: Retrieves the next cache group in a cache group enumeration [DllImport( @"wininet" , SetLastError = true , CharSet = CharSet.Auto, EntryPoint = "FindNextUrlCacheGroup" , CallingConvention = CallingConvention.StdCall)] protected static extern bool FindNextUrlCacheGroup( IntPtr hFind, ref long lpGroupId, IntPtr lpReserved); // For PInvoke: Releases the specified GROUPID and any associated state in the cache index file [DllImport( @"wininet" , SetLastError = true , CharSet = CharSet.Auto, EntryPoint = "DeleteUrlCacheGroup" , CallingConvention = CallingConvention.StdCall)] protected static extern bool DeleteUrlCacheGroup( long GroupId, int dwFlags, IntPtr lpReserved); // For PInvoke: Begins the enumeration of the Internet cache [DllImport( @"wininet" , SetLastError = true , CharSet = CharSet.Auto, EntryPoint = "FindFirstUrlCacheEntryA" , CallingConvention = CallingConvention.StdCall)] protected static extern IntPtr FindFirstUrlCacheEntry( [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern, IntPtr lpFirstCacheEntryInfo, ref int lpdwFirstCacheEntryInfoBufferSize); // For PInvoke: Retrieves the next entry in the Internet cache [DllImport( @"wininet" , SetLastError = true , CharSet = CharSet.Auto, EntryPoint = "FindNextUrlCacheEntryA" , CallingConvention = CallingConvention.StdCall)] protected static extern bool FindNextUrlCacheEntry( IntPtr hFind, IntPtr lpNextCacheEntryInfo, ref int lpdwNextCacheEntryInfoBufferSize); // For PInvoke: Removes the file that is associated with the source name from the cache, if the file exists [DllImport( @"wininet" , SetLastError = true , CharSet = CharSet.Auto, EntryPoint = "DeleteUrlCacheEntryA" , CallingConvention = CallingConvention.StdCall)] protected static extern bool DeleteUrlCacheEntry( IntPtr lpszUrlName) public static void DelCache(){ // Indicates that all of the cache groups in the user's system should be enumerated const int CACHEGROUP_SEARCH_ALL = 0x0; // Indicates that all the cache entries that are associated with the cache group // should be deleted, unless the entry belongs to another cache group. const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x2; // File not found. const int ERROR_FILE_NOT_FOUND = 0x2; // No more items have been found. const int ERROR_NO_MORE_ITEMS = 259; // Pointer to a GROUPID variable long groupId = 0; // Local variables int cacheEntryInfoBufferSizeInitial = 0; int cacheEntryInfoBufferSize = 0; IntPtr cacheEntryInfoBuffer = IntPtr.Zero; INTERNET_CACHE_ENTRY_INFOA internetCacheEntry; IntPtr enumHandle = IntPtr.Zero; bool returnValue = false // Delete the groups first. // Groups may not always exist on the system. // For more information, visit the following Microsoft Web site: // By default, a URL does not belong to any group. Therefore, that cache may become // empty even when the CacheGroup APIs are not used because the existing URL does not belong to any group. enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, ref groupId, IntPtr.Zero); // If there are no items in the Cache, you are finished. if (enumHandle != IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error()) return ; // Loop through Cache Group, and then delete entries. while ( true ) { // Delete a particular Cache Group. returnValue = DeleteUrlCacheGroup(groupId, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero); if (!returnValue && ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error()) { returnValue = FindNextUrlCacheGroup(enumHandle, ref groupId, IntPtr.Zero); } if (!returnValue && (ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error() || ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error())) break ; } // Start to delete URLs that do not belong to any group. enumHandle = FindFirstUrlCacheEntry( null , IntPtr.Zero, ref cacheEntryInfoBufferSizeInitial); if (enumHandle == IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error()) return ; cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial; cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize); enumHandle = FindFirstUrlCacheEntry( null , cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial); while ( true ) { internetCacheEntry = (INTERNET_CACHE_ENTRY_INFOA)Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof (INTERNET_CACHE_ENTRY_INFOA)); cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize; returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName); string s = Marshal.PtrToStringAnsi(internetCacheEntry.lpszLocalFileName); if (!returnValue) { returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial); } if (!returnValue && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error()) { break ; } if (!returnValue && cacheEntryInfoBufferSizeInitial > cacheEntryInfoBufferSize) { cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial; cacheEntryInfoBuffer = Marshal.ReAllocHGlobal(cacheEntryInfoBuffer, (IntPtr)cacheEntryInfoBufferSize); returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial); } } Marshal.FreeHGlobal(cacheEntryInfoBuffer); } } } |
效果:总体来说还是有点效果的,但是效率极低,会出现长时间的等待情况,程序假死. 最重要的是不知道什么时候结束.
③.调用RunDll32.exe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
RunCmd( "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8" ); void RunCmd( string cmd) { System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "cmd.exe" ; // 关闭Shell的使用 p.StartInfo.UseShellExecute = false ; // 重定向标准输入 p.StartInfo.RedirectStandardInput = true ; // 重定向标准输出 p.StartInfo.RedirectStandardOutput = true ; //重定向错误输出 p.StartInfo.RedirectStandardError = true ; p.StartInfo.CreateNoWindow = true ; p.Start(); p.StandardInput.WriteLine(cmd); p.StandardInput.WriteLine( "exit" ); } |
效果: 这个方法解决的我的问题,缓存被清空.
以下是其他一些参数的说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//Temporary Internet Files (Internet临时文件) //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 //Cookies //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2 //History (历史记录) //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1 //Form Data (表单数据) //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16 //Passwords (密码) //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32 //Delete All (全部删除) //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255 //Delete All - "Also delete files and settings stored by add-ons" //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351 |
c# winform清空ie缓存的几种方法的更多相关文章
- js清除浏览器缓存的几种方法
2014年9月24日 4692次浏览 关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能.但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数 ...
- linux中快速清空文件内容的几种方法
这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...
- C语言清空输入缓冲区的N种方法对比
转自C语言清空输入缓冲区的N种方法对比 C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int get ...
- linux清空文件内容的三种方法
linux系统中清空文件内容的三种方法 1.使用vi/vim命令打开文件后,输入"%d"清空,后保存即可.但当文件内容较大时,处理较慢,命令如下:vim file_name:%d: ...
- winform防止界面卡死的三种方法
在编程过程中经常会遇到耗时操作,这个时候如果不采取一些必要的异步操作,就会导致界面的卡死,这里以winform为例子,介绍三种方法防止界面卡死,对这几个方法稍加修改同样适用于wpf,silverlig ...
- ASP.Net 更新页面输出缓存的几种方法
ASP.Net 自带的缓存机制对于提高页面性能有至关重要的作用,另一方面,缓存的使用也会造成信息更新的延迟.如何快速更新缓存数据,有时成了困扰程序员的难题.根据我的使用经验,总结了下面几种方法,概括了 ...
- iOS清理缓存的几种方法
- (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* manager = [NSFileManager defau ...
- iOS 处理缓存的三种方法
缓存处理是个相当头疼的事情,要根据需要综合应用不同的策略.总的来说有以下几种情况: 1.URL缓存,例如社交应用的帖子浏览,要在viewDidAppear:里面进行URL缓存.简单来说就是用NSURL ...
- C语言清空输入缓冲区的N种方法对比【转】
转自:http://www.cnblogs.com/codingmylife/archive/2010/04/18/1714954.html C语言中有几个基本输入函数: //获取字符系列 int f ...
随机推荐
- Jeesite 定时任务 Task
转自 http://blog.lunhui.ren/archives/280 第一种方式 一. spring-context.xml配置加入 xmlns:task=”http://www.spring ...
- Codeforces_448C 分治
昨晚CF碰到的题目,昨晚CF跪了啊啊啊 题意比较简单,给定一排挨在一起的板子,宽度都为1,高度不一,一个刷子宽度也是1,可以横着刷,也可以竖着刷,但是任何时刻刷子都要在板子上,也就是说,如果横向的时候 ...
- 1、求loss:tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None))
1.求loss: tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)) 第一个参数log ...
- java Kafka 简单应用实例
kafka官方中文文档 http://kafka.apachecn.org/ java Kafka 简单应用实例 下面是Linux下的单机模式:https://blog.csdn.net/fct2 ...
- spring_mybatis :整合
第一步:导入相关架包(使用maven构建项目) 在pom.xml文件中导入相关依赖 1.Junit测试架包 <dependency> <groupId>junit</gr ...
- with和上下文管理器
with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后 ...
- 百度链接提交-js代码推送批量推送版
1原百度JS链接推送代码 首先我们来看一下原百度JS链接推送代码是这*样的 用百度自己的话讲:JS链接推送代码以网页为最小对象,服务于全平台多终端,PC站和移动站均可使用.安装代码的页面在任意平台(浏 ...
- 使用plantuml插件
安装 https://github.com/jvantuyl/sublime_diagram_plugin 安装依赖 brew install graphviz 把sublime_diagram_pl ...
- potplayer记住播放进度
(右键——选项)F5——播放——记忆视频播放位置
- E - Tokitsukaze and Duel CodeForces - 1190C (博弈 + 窗体移动)
"Duel!" Betting on the lovely princess Claris, the duel between Tokitsukaze and Quailty ha ...