zoukankan      html  css  js  c++  java
  • [转]c# 根据URL定位InternetCache中文件的位置

    本文转自:http://zeze-love.blogspot.com/2008/10/c-urlinternetcache.html

    从IE浏览器缓存中根据URL定位本地文件有很多用处,比如直接从缓存中保存浏览过的图片,避免再次下载以节省带宽,另外在显示或保存验证码图片之类每次访问都会随机改变的文件时也很有用。但是由于在本地系统中浏览器缓存的临时文件并不是用一般方式保存的(具体参加MSDN),所以处理上稍微麻烦一些。

    前段时间用 c# 写一个小程序时,使用如下代码获取指定URL文件缓存在本地文件系统中的临时文件的路径。
    using System.Runtime.InteropServices;

    ...


    [DllImport("Wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern Boolean GetUrlCacheEntryInfo(String lpxaUrlName, IntPtr lpCacheEntryInfo, ref int lpdwCacheEntryInfoBufferSize);

    const int ERROR_FILE_NOT_FOUND = 0x2;
    struct LPINTERNET_CACHE_ENTRY_INFO
    {
    public int dwStructSize;
    IntPtr lpszSourceUrlName;
    public IntPtr lpszLocalFileName;
    int CacheEntryType;
    int dwUseCount;
    int dwHitRate;
    int dwSizeLow;
    int dwSizeHigh;
    FILETIME LastModifiedTime;
    FILETIME Expiretime;
    FILETIME LastAccessTime;
    FILETIME LastSyncTime;
    IntPtr lpHeaderInfo;
    int dwheaderInfoSize;
    IntPtr lpszFileExtension;
    int dwEemptDelta;
    }

    // 返回 指定URL文件的缓存在本地文件系统中的路径
    private string GetPathForCachedFile(string fileUrl)
    {
    int cacheEntryInfoBufferSize = 0;
    IntPtr cacheEntryInfoBuffer = IntPtr.Zero;
    int lastError; Boolean result;
    try
    {
    result = GetUrlCacheEntryInfo(fileUrl, IntPtr.Zero, ref cacheEntryInfoBufferSize);
    lastError = Marshal.GetLastWin32Error();
    if (result == false)
    {
    if (lastError == ERROR_FILE_NOT_FOUND) return null;
    }
    cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize);

    result = GetUrlCacheEntryInfo(fileUrl, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSize);
    lastError = Marshal.GetLastWin32Error();
    if (result == true)
    {
    Object strObj = Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof(LPINTERNET_CACHE_ENTRY_INFO));
    LPINTERNET_CACHE_ENTRY_INFO internetCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO)strObj;
    String localFileName = Marshal.PtrToStringAuto(internetCacheEntry.lpszLocalFileName); return localFileName;
    }
    else return null;// file not found
    }
    finally
    {
    if (!cacheEntryInfoBuffer.Equals(IntPtr.Zero)) Marshal.FreeHGlobal(cacheEntryInfoBuffer);
    }
    }

  • 相关阅读:
    数字图像、灰度直方图、色彩空间
    编译原理
    Visual studio文件中不同图标对应对象的类别
    230 前端之JQuery:JQuery属性操作
    229 前端之JQuery:JQuery基本语法
    228 前端之JavaScript:JS之DOM对象三
    227 前端之JavaScript:JS之DOM对象二
    226 前端之JavaScript:JS之DOM对象一
    225 前端之JavaScript:JavaScript对象
    021 用Vue.js搭建一个小说阅读网站
  • 原文地址:https://www.cnblogs.com/freeliver54/p/1326152.html
Copyright © 2011-2022 走看看