最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)清除IE瀏覽器緩存的方法

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

本文實(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>&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>簡(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ì)有所幫助。

相關(guān)文章

  • C# WPF編程之命令模型詳解

    C# WPF編程之命令模型詳解

    這篇文章主要為大家詳細(xì)介紹了C# WPF編程中命令模型的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • datagridview實(shí)現(xiàn)手動(dòng)添加行數(shù)據(jù)

    datagridview實(shí)現(xiàn)手動(dòng)添加行數(shù)據(jù)

    這篇文章主要介紹了datagridview實(shí)現(xiàn)手動(dòng)添加行數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • C#多態(tài)的三種實(shí)現(xiàn)方式(小結(jié))

    C#多態(tài)的三種實(shí)現(xiàn)方式(小結(jié))

    這篇文章主要介紹了C#多態(tài)的三種實(shí)現(xiàn)方式(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • c# dataTable 合并兩個(gè)列到一個(gè)新列中的簡(jiǎn)單實(shí)例

    c# dataTable 合并兩個(gè)列到一個(gè)新列中的簡(jiǎn)單實(shí)例

    這篇文章介紹了c# dataTable 合并兩個(gè)列到一個(gè)新列中的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-10-10
  • Unity3D中腳本的執(zhí)行順序和編譯順序

    Unity3D中腳本的執(zhí)行順序和編譯順序

    在Unity中可以同時(shí)創(chuàng)建很多腳本,并且可以分別綁定到不同的游戲?qū)ο笊?,它們各自都在自己的生命周期中運(yùn)行。與腳本有關(guān)的也就是編譯和執(zhí)行啦,本文就來(lái)研究一下Unity中腳本的編譯和執(zhí)行順序的問(wèn)題。
    2014-11-11
  • C#使用Lazy實(shí)現(xiàn)延遲加載的方法示例

    C#使用Lazy實(shí)現(xiàn)延遲加載的方法示例

    在C#中,Lazy< T> 類是一個(gè)非常有用的工具,它可以用于延遲加載值,在本文中,我們將詳細(xì)介紹 Lazy< T> 的實(shí)現(xiàn)機(jī)制和用法,并提供一些示例來(lái)展示它的優(yōu)勢(shì),文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 如何在C#中使用只讀的 Collections

    如何在C#中使用只讀的 Collections

    這篇文章主要介紹了如何在C#中使用只讀的 Collections,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C#使用StopWatch獲取程序毫秒級(jí)執(zhí)行時(shí)間的方法

    C#使用StopWatch獲取程序毫秒級(jí)執(zhí)行時(shí)間的方法

    這篇文章主要介紹了C#使用StopWatch獲取程序毫秒級(jí)執(zhí)行時(shí)間的方法,涉及C#操作時(shí)間的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#中的GDI+圖像編程詳解

    C#中的GDI+圖像編程詳解

    本文詳細(xì)講解了C#中的GDI+圖像編程,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C# Chart繪制簡(jiǎn)單圖形波形

    C# Chart繪制簡(jiǎn)單圖形波形

    這篇文章主要為大家詳細(xì)介紹了C# Chart繪制簡(jiǎn)單圖形波形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

永仁县| 年辖:市辖区| 舞钢市| 宁国市| 南丹县| 鄄城县| 翁牛特旗| 沽源县| 泸水县| 六盘水市| 曲阜市| 正蓝旗| 开阳县| 榆社县| 郴州市| 溧阳市| 临西县| 伊川县| 日照市| 永德县| 鄂伦春自治旗| 潍坊市| 进贤县| 三原县| 太原市| 保定市| 青海省| 林西县| 安义县| 通州市| 藁城市| 衢州市| 武隆县| 宣威市| 茂名市| 米易县| 宁安市| 岳西县| 吉安市| 临江市| 公主岭市|