程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成消除IE閱讀器緩存的辦法

C#完成消除IE閱讀器緩存的辦法

編輯:C#入門知識

C#完成消除IE閱讀器緩存的辦法。本站提示廣大學習愛好者:(C#完成消除IE閱讀器緩存的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成消除IE閱讀器緩存的辦法正文


本文實例講述了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>  " +
  "<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上傳組件的成績

應用該組件的時刻 ,發明上傳圖片的時刻 ,第一次上傳的時刻沒有任何成績,第二次上傳的時刻會湧現沒法上傳的情形,沒有任何反響,沒有任何毛病,上傳進度不動,上傳的後台代碼也不克不及觸發.

處理計劃是:清空閱讀器緩存就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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved