大家知道,在我們訪問乙個**的時候。系統會把這個**上的,動畫等內容全部快取到internet臨時資料夾中。
我們可以通過 :/documents and settings//local settings/temporary internet files訪問。但是可能我們都沒有想到,裡面的檔案實際卻不同於我們系統中其他的資料夾和檔案的關係。
舉例說明,我們在vs.net下寫乙個函式來返回指定資料夾中的資料夾和所有檔案時,但我們把internet臨時資料夾的位址傳進去時,系統只會返回乙個檔案,那就是desktop.ini(每個資料夾都有),還有乙個隱藏的資料夾。所以這就證明了在臨時資料夾中的檔案並不是按照普通的資料夾與檔案的方式存在的。
其實windows是把臨時檔案全部存在乙個隱藏的資料夾中,這個資料夾是我們都看不到的,然後靠乙個index.dat的索引把內容全部讀出來回顯給使用者。
那我們怎麼用程式來讀取其中的內容呢?
首先要引用乙個user.dll,在系統資料夾中。然後利用它其中的一些函式就可以遍歷整個資料夾,並獲得其中每個檔案的資訊。
[dllimport("wininet.dll", setlasterror=true, charset=charset.auto)]
public static extern intptr findfirsturlcacheentry(
[marshalas(unmanagedtype.lptstr)] string lpszurlsearchpattern,
intptr lpfirstcacheentryinfo,
ref int lpdwfirstcacheentryinfobuffersize);
[dllimport("wininet.dll", setlasterror=true, charset=charset.auto)]
public static extern bool findnexturlcacheentry(
intptr henumhandle,
intptr lpnextcacheentryinfo,
ref int lpdwnextcacheentryinfobuffersize);
[dllimport("wininet.dll")]
public static extern bool findcloseurlcache(
intptr henumhandle);
引入以上三個函式來遍歷臨時資料夾,然後再引用
[dllimport("kernel32.dll",setlasterror=true, charset=charset.auto)]
public static extern int filetimetosystemtime(
intptr lpfiletime,
intptr lpsystemtime);
用來把 filetime時間格式轉化成c#中的string型別,以便我們進一步操作。
主體程式如下:
#region 引入dll
[structlayout(layoutkind.sequential, charset=charset.auto)]
public struct internet_cache_entry_info
[structlayout(layoutkind.sequential, charset=charset.auto)]
public struct systemtime
[dllimport("kernel32.dll",setlasterror=true, charset=charset.auto)]
public static extern int filetimetosystemtime(
intptr lpfiletime,
intptr lpsystemtime);
[dllimport("wininet.dll", setlasterror=true, charset=charset.auto)]
public static extern intptr findfirsturlcacheentry(
[marshalas(unmanagedtype.lptstr)] string lpszurlsearchpattern,
intptr lpfirstcacheentryinfo,
ref int lpdwfirstcacheentryinfobuffersize);
[dllimport("wininet.dll", setlasterror=true, charset=charset.auto)]
public static extern bool findnexturlcacheentry(
intptr henumhandle,
intptr lpnextcacheentryinfo,
ref int lpdwnextcacheentryinfobuffersize);
[dllimport("wininet.dll")]
public static extern bool findcloseurlcache(
intptr henumhandle);
const int error_no_more_items = 259;
#endregion
#region filetimetosystemtime
private string filetimetodatatime(filetime time)
#endregion
#region 載入資料
private void fileok_click(object sender, system.eventargs e)
catch
#endregion
string s = marshal.ptrtostringauto(cacheitem.lpszsourceurlname);
nneeded = nbufsize;
r = findnexturlcacheentry( henum, buf, ref nneeded );
if ( !r && marshal.getlastwin32error() == error_no_more_items )
break;
if ( !r && nneeded > nbufsize ) }
messagebox.show("系統資料載入完畢!");
marshal.freehglobal( buf );
} #endregion
C 獲取 IE 臨時檔案
大家知道,在我們訪問乙個 的時候。系統會把這個 上的,動畫等內容全部快取到internet臨時資料夾中。我們可以通過 documents and settings local settings temporary internet files訪問。但是可能我們都沒有想到,裡面的檔案實際卻不同於我們系...
C 獲取 IE 臨時檔案
大家知道,在我們訪問乙個 的時候。系統會把這個 上的,動畫等內容全部快取到internet臨時資料夾中。我們可以通過 documents and settings local settings temporary internet files訪問。但是可能我們都沒有想到,裡面的檔案實際卻不同於我們系...
C 建立臨時檔案
1.在臨時檔案只能夠建立乙個臨時檔案並返回該檔案的完整路徑 在臨時檔案只能夠建立乙個臨時檔案並返回該檔案的完整路徑 c documents and settings yourname local settings temp t e6.tmp system.io.path.gettempfilenam...