欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現清除IE瀏覽器緩存的方法

 更新時間:2015年08月07日 18:04:27   作者:Adam Viki  
這篇文章主要介紹了C#實現清除IE瀏覽器緩存的方法,實例分析了C#針對瀏覽器緩存清理所涉及的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了C#實現清除IE瀏覽器緩存的方法。分享給大家供大家參考。具體如下:

項目中碰到wpf webbrowser的幾個問題,在此記錄一下

1.webbrowser中對于jquery的bind事件的處理.

在普通的瀏覽器下一下這種寫法沒有任何問題

  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>&nbsp;&nbsp;" +
  "<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>簡介</th><th>詳細描述</th><th>操作</th></tr></thead>" +
  "<tbody id='t_" + guid + "' class='css_tbody'></tbody></table></div>"
);
$("#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上傳組件的問題

使用該組件的時候 ,發(fā)現上傳圖片的時候 ,第一次上傳的時候沒有任何問題,第二次上傳的時候會出現無法上傳的情況,沒有任何反應,沒有任何錯誤,上傳進度不動,上傳的后臺代碼也不能觸發(fā).

解決方案是:清空瀏覽器緩存就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#程序設計有所幫助。

相關文章

  • C#實現的調用DOS命令操作類實例

    C#實現的調用DOS命令操作類實例

    這篇文章主要介紹了C#實現的調用DOS命令操作類,實例分析了C#調用系統常用DOS命令的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#中的正則表達式介紹

    C#中的正則表達式介紹

    關于正則表達式,我們都知道挺繁瑣的。本文介紹的是C#中的正則表達式,希望對你有幫助,一起來看。
    2015-10-10
  • c#匹配整數和小數的正則表達式

    c#匹配整數和小數的正則表達式

    c#中使用正則表達式需要加入using System.Text.RegularExpressions的引用
    2010-12-12
  • C#帶你玩掃雷(附源碼)

    C#帶你玩掃雷(附源碼)

    這篇文章主要介紹了C#帶你玩掃雷(附源碼),詳細的介紹實現掃雷的方法,具體一定的參考價值,有興趣的可以了解一下
    2017-10-10
  • C#創(chuàng)建SQLite控制臺應用程序詳解

    C#創(chuàng)建SQLite控制臺應用程序詳解

    這篇文章主要為大家詳細介紹了C#創(chuàng)建SQLite控制臺應用程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#判斷指定驅動器是否是Fat分區(qū)格式的方法

    C#判斷指定驅動器是否是Fat分區(qū)格式的方法

    這篇文章主要介紹了C#判斷指定驅動器是否是Fat分區(qū)格式的方法,涉及C#中DriveFormat屬性的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • WPF中窗體最大化問題的解決方法

    WPF中窗體最大化問題的解決方法

    這篇文章主要給大家介紹了關于WPF中窗體最大化問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用wpf具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • C# PictureBox圖片控件實現圖片交換

    C# PictureBox圖片控件實現圖片交換

    在c#中可以使用PictureBox控件來呈現圖像,本文主要介紹了C# PictureBox實現圖片交換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • WPF使用Dragablz構建可拖拽分離的Tab頁程序

    WPF使用Dragablz構建可拖拽分離的Tab頁程序

    這篇文章介紹了WPF使用Dragablz構建可拖拽分離Tab頁的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C#中l(wèi)ock死鎖實例教程

    C#中l(wèi)ock死鎖實例教程

    這篇文章主要介紹了C#中l(wèi)ock死鎖的用法,對于共享資源的訪問及C#程序設計的安全性而言,有著非常重要的意義!需要的朋友可以參考下
    2014-08-08

最新評論