[등급] C \ # 로 IE 임시 파일 가 져 오기

9921 단어 C#
우리 가 한 사 이 트 를 방 문 했 을 때시스템 은 이 사이트 의 그림, 애니메이션 등 내용 을 모두 인터넷 임시 폴 더 에 캐 시 합 니 다. 우 리 는 통과 할 수 있다. :\Documents and Settings\\Local Settings\Temporary Internet Files 접근.그러나 안에 있 는 파일 이 실제로 우리 시스템 의 다른 폴 더 와 파일 의 관계 와 다르다 는 것 을 우 리 는 생각 하지 못 했 을 것 이다. 예 를 들 어, 우 리 는 vs. net 에서 지정 한 폴 더 와 모든 파일 을 되 돌려 주 는 함 수 를 썼 을 때, 인터넷 임시 폴 더 의 주 소 를 입력 할 때 시스템 은 하나의 파일 만 되 돌려 줍 니 다. 그것 이 바로 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

{

public int dwStructSize;

public IntPtr lpszSourceUrlName;

public IntPtr lpszLocalFileName;

public int CacheEntryType;

public int dwUseCount;

public int dwHitRate;

public int dwSizeLow;

public int dwSizeHigh;

public FILETIME LastModifiedTime;

public FILETIME ExpireTime;

public FILETIME LastAccessTime;

public FILETIME LastSyncTime;

public IntPtr lpHeaderInfo;

public int dwHeaderInfoSize;

public IntPtr lpszFileExtension;

public int dwExemptDelta;

}

[structlayout(layoutkind.sequential, CharSet = CharSet.Auto)]

public struct SYSTEMTIME

{

public short wYear;

public short wMonth;

public short wDayOfWeek;

public short wDay;

public short wHour;

public short wMinute;

public short wSecond;

public short wMilliseconds;

}

[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)

{

IntPtr filetime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(FILETIME)));

IntPtr systime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SYSTEMTIME)));

Marshal.StructureToPtr(time, filetime, true);

FileTimeToSystemTime(filetime, systime);

SYSTEMTIME st = (SYSTEMTIME) Marshal.PtrToStructure(systime, typeof(SYSTEMTIME));

string Time = st.wYear.ToString() + "." + st.wMonth.ToString() + "." + st.wDay.ToString()

+ "." + st.wHour.ToString() + "." + st.wMinute.ToString() + "." + st.wSecond.ToString();

return Time;

}



#endregion



#region     

private void FileOk_Click(object sender, System.EventArgs e)

{

int nNeeded = 0, nBufSize;

IntPtr buf;

INTERNET_CACHE_ENTRY_INFO CacheItem;

IntPtr hEnum;

bool r;

findfirsturlcacheentry(null, IntPtr.Zero, ref nNeeded);

if (Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS)

return;

nbufsize = nNeeded;

buf = Marshal.AllocHGlobal(nBufSize);

hEnum = FindFirstUrlCacheEntry(null, buf, ref nNeeded);

while (true)

{

CacheItem = (INTERNET_CACHE_ENTRY_INFO) Marshal.PtrToStructure(buf,

typeof(INTERNET_CACHE_ENTRY_INFO));

string modifiedTime = FILETIMEtoDataTime(CacheItem.LastModifiedTime);

string expireTime = FILETIMEtoDataTime(CacheItem.ExpireTime);

string accessTime = FILETIMEtoDataTime(CacheItem.LastAccessTime);

string syncTime = FILETIMEtoDataTime(CacheItem.LastSyncTime);



#region     ,     

        try

{

//    CacheItem  

            //  

            string s = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName);

}

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)

{

nBufSize = nNeeded;

buf = Marshal.ReAllocHGlobal(buf, (IntPtr) nBufSize);

FindNextUrlCacheEntry(hEnum, buf, ref nNeeded);

}

}

MessageBox.Show("        !");

Marshal.FreeHGlobal(buf);

}



#endregion

좋은 웹페이지 즐겨찾기