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