xp ie清除css缓存,C#实现清除IE浏览器缓存的方法

本文实例讲述了C#实现清除IE浏览器缓存的方法。分享给大家供大家参考。具体如下:

项目中碰到wpf webbrowser的几个问题,在此记录一下

1.webbrowser中对于jquery的bind事件的处理.

在普通的浏览器下一下这种写法没有任何问题

var content = $("

" + category_name + "(添加展示)" +

"修改分类  " +

"删除分类" +

"

"缩略图展示名称简介详细描述操作" +

"

"

);

$("#vtab").append(content);

但是在webbrowser中事件就会不响应,把content中的onclick去掉,在下面这样绑定:

$("#edit_" + guid).unbind("click").bind("click", function () { showCategory(this, guid) });

$("#del_" + guid).unbind("click").bind("click", function () { delCategory(this,guid)});

2.在webbrowser中使用jquery uploadify上传组件的问题

使用该组件的时候 ,发现上传图片的时候 ,第一次上传的时候没有任何问题,第二次上传的时候会出现无法上传的情况,没有任何反应,没有任何错误,上传进度不动,上传的后台代码也不能触发.

解决方案是:清空浏览器缓存就Ok 了.下面就介绍代码清空缓存的方法

3. 清理IE缓存的方法

很明显 IE的缓存在其目录中显示的并不是真正的文件所处的位置,文件的位置是在隐藏的文件夹中,而且这个隐藏的文件夹我们一般找不到.在网上几种清空缓存的方法,在此我一一把代码和处理的效果显示出来.供大家参考.

①.使用ie缓存路径来删除缓存的

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 清理缓存 上代码

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:

// http://msdn.microsoft.com/library/?url=/workshop/networking/wininet/overview/cache.asp

// 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

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

}

效果: 这个方法解决的我的问题,缓存被清空.

以下是其他一些参数的说明:

//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#程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值