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#法式設計有所贊助。