C#實(shí)現(xiàn)清除IE瀏覽器緩存的方法
本文實(shí)例講述了C#實(shí)現(xiàn)清除IE瀏覽器緩存的方法。分享給大家供大家參考。具體如下:
項(xiàng)目中碰到wpf webbrowser的幾個(gè)問(wèn)題,在此記錄一下
1.webbrowser中對(duì)于jquery的bind事件的處理.
在普通的瀏覽器下一下這種寫法沒(méi)有任何問(wèn)題
var content = $("<div><h4><span>" + category_name + "</span>(<a id='href_" + guid + "' href='AddOrEditShowInfo.aspx?Category=" + guid + "'>添加展示</a>)" +
"<span id='edit_" + guid + "' style='font-size:12px;cursor:pointer;' onclick='showCategory(this, \""+guid+"\")'>修改分類</span> " +
"<span id='del_" + guid + "' style='font-size:12px;cursor:pointer;' onclick=delCategory(this, \""+guid+"\")'>刪除分類</span></h4>" +
"<table class='gridview' cellspacing='0' rules='all' border='1' id='gvData' width='100%'>" +
"<thead><tr><th>縮略圖</th><th>展示名稱</th><th>簡(jiǎn)介</th><th>詳細(xì)描述</th><th>操作</th></tr></thead>" +
"<tbody id='t_" + guid + "' class='css_tbody'></tbody></table></div>"
);
$("#vtab").append(content);
但是在webbrowser中事件就會(huì)不響應(yīng),把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上傳組件的問(wèn)題
使用該組件的時(shí)候 ,發(fā)現(xiàn)上傳圖片的時(shí)候 ,第一次上傳的時(shí)候沒(méi)有任何問(wèn)題,第二次上傳的時(shí)候會(huì)出現(xiàn)無(wú)法上傳的情況,沒(méi)有任何反應(yīng),沒(méi)有任何錯(cuò)誤,上傳進(jìn)度不動(dòng),上傳的后臺(tái)代碼也不能觸發(fā).
解決方案是:清空瀏覽器緩存就Ok 了.下面就介紹代碼清空緩存的方法
3. 清理IE緩存的方法
很明顯 IE的緩存在其目錄中顯示的并不是真正的文件所處的位置,文件的位置是在隱藏的文件夾中,而且這個(gè)隱藏的文件夾我們一般找不到.在網(wǎng)上幾種清空緩存的方法,在此我一一把代碼和處理的效果顯示出來(lái).供大家參考.
①.使用ie緩存路徑來(lái)刪除緩存的
string cachePath = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
//獲取緩存路徑
DirectoryInfo di = new DirectoryInfo(cachePath);
foreach (FileInfo fi in di.GetFiles("*.*", SearchOption.AllDirectories))//遍歷所有的文件夾 刪除里面的文件
{
try
{
fi.Delete();
}
catch { }
}
效果:并沒(méi)有真正的刪除緩存文件.而且會(huì)出現(xiàn)很多異常,比如enguser.dat,index.dat,,,這些文件刪除的時(shí)候會(huì)出現(xiàn)另一個(gè)程序還在使用的錯(cuò)誤
②.調(diào)用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);
}
}
}
效果:總體來(lái)說(shuō)還是有點(diǎn)效果的,但是效率極低,會(huì)出現(xiàn)長(zhǎng)時(shí)間的等待情況,程序假死. 最重要的是不知道什么時(shí)候結(jié)束.
③.調(diào)用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";
// 關(guān)閉Shell的使用
p.StartInfo.UseShellExecute = false;
// 重定向標(biāo)準(zhǔn)輸入
p.StartInfo.RedirectStandardInput = true;
// 重定向標(biāo)準(zhǔn)輸出
p.StartInfo.RedirectStandardOutput = true;
//重定向錯(cuò)誤輸出
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(cmd);
p.StandardInput.WriteLine("exit");
}
效果: 這個(gè)方法解決的我的問(wèn)題,緩存被清空.
以下是其他一些參數(shù)的說(shuō)明:
//Temporary Internet Files (Internet臨時(shí)文件) //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 //Cookies //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2 //History (歷史記錄) //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1 //Form Data (表單數(shù)據(jù)) //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
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- C#實(shí)現(xiàn)基于IE內(nèi)核的簡(jiǎn)單瀏覽器完整實(shí)例
- C# 利用Selenium實(shí)現(xiàn)瀏覽器自動(dòng)化操作的示例代碼
- C#瀏覽器提示跨域問(wèn)題解決方案
- C# 模擬瀏覽器并自動(dòng)操作的實(shí)例代碼
- C#導(dǎo)出pdf的實(shí)現(xiàn)方法(瀏覽器不預(yù)覽直接下載)
- C# WinForm實(shí)現(xiàn)圖片瀏覽器
- C#文件下載實(shí)例代碼(適用于各個(gè)瀏覽器)
- C#實(shí)現(xiàn)多選項(xiàng)卡的瀏覽器控件
- C#編程實(shí)現(xiàn)簡(jiǎn)易圖片瀏覽器的方法
- C#使用默認(rèn)瀏覽器打開(kāi)網(wǎng)頁(yè)的方法
- c# 從IE瀏覽器獲取當(dāng)前頁(yè)面的內(nèi)容
相關(guān)文章
C#實(shí)現(xiàn)的調(diào)用DOS命令操作類實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的調(diào)用DOS命令操作類,實(shí)例分析了C#調(diào)用系統(tǒng)常用DOS命令的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C#創(chuàng)建SQLite控制臺(tái)應(yīng)用程序詳解
這篇文章主要為大家詳細(xì)介紹了C#創(chuàng)建SQLite控制臺(tái)應(yīng)用程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
C#判斷指定驅(qū)動(dòng)器是否是Fat分區(qū)格式的方法
這篇文章主要介紹了C#判斷指定驅(qū)動(dòng)器是否是Fat分區(qū)格式的方法,涉及C#中DriveFormat屬性的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C# PictureBox圖片控件實(shí)現(xiàn)圖片交換
在c#中可以使用PictureBox控件來(lái)呈現(xiàn)圖像,本文主要介紹了C# PictureBox實(shí)現(xiàn)圖片交換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
WPF使用Dragablz構(gòu)建可拖拽分離的Tab頁(yè)程序
這篇文章介紹了WPF使用Dragablz構(gòu)建可拖拽分離Tab頁(yè)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06

