分多,人傻,速来!webbrowser可否在离线浏览以前打开过的页面?

APM60- 2012-08-22 01:19:18
就像IE在离线状态下显示临时文件夹下的缓存页面一样。

webbrowser是否可以实现这样的功能。
比如在判断网络断开或者加载页面超时的情况下,打开IE临时文件夹下保存的相应页面?

我查了一下。webbrowser与IE用的是同样的临时文件目录。
win7下是 C:\Users\用户名\AppData\Local\Microsoft\Windows\Temporary Internet Files 这个目录。
查看方式为详细信息,能看到文件的internet地址。
请问如何获取这个internet地址,或者说查找某个internet地址的缓存文件?

请问如何才能让webbrowser在离线状态下显示相应缓存页面?
...全文
232 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
APM60- 2013-02-22
  • 打赏
  • 举报
回复
以下是根据网址返回本地缓存地址的具体代码。 散分~

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文件的缓存在本地文件系统中的路径
    public static 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);
      }
    }
njw1028 2013-02-21
  • 打赏
  • 举报
回复
顶 楼 主 ~
F15Eagle 2013-02-21
  • 打赏
  • 举报
回复
占座。楼主意图提高结贴率。
  • 打赏
  • 举报
回复
本地保存数据才可以打开,要不然好像不可以打开的说
足球中国 2013-02-21
  • 打赏
  • 举报
回复
webbrowser也是一个程序。是一个可以打开一些文件的程序。 你把地址付本地文件地址也可以打开。只要是可以让webbrowser识别的文件。
APM60- 2013-02-21
  • 打赏
  • 举报
回复
还有几个老帖。 http://bbs.csdn.net/topics/390360261 http://bbs.csdn.net/topics/390273910 http://bbs.csdn.net/topics/390150101 无满意答案有点浪费分;分全给唯一一个回帖的人又有倒分嫌疑。 帮忙回复下,人齐散分结贴。
风吹腚腚凉 2013-02-21
  • 打赏
  • 举报
回复
楼主我来给你一个结贴的机会啦,沙发~~~
IT0329 2013-02-21
  • 打赏
  • 举报
回复
gajuesy 2013-02-21
  • 打赏
  • 举报
回复
引用 1 楼 slowhand 的回复:
回来看看自己半年前发的帖子。 真够冷清的~ 最近又查了下这方面的资料。 用GetUrlCacheEntryInfo可以获取指定网址对应的缓存文件路径。 还有一点小问题,缓存页面引用的文件(如js、img)还是远程路径。 实在没别的办法,只能先读出页面内容,再挨个替换内部元素路径为缓存路径了。 本帖现在科普+散分。 没人回连结贴都不行~
接分,学习了~楼主不要灰心
CandPointer 2013-02-21
  • 打赏
  • 举报
回复
MSDN,文档很详细了
APM60- 2013-02-21
  • 打赏
  • 举报
回复
回来看看自己半年前发的帖子。 真够冷清的~ 最近又查了下这方面的资料。 用GetUrlCacheEntryInfo可以获取指定网址对应的缓存文件路径。 还有一点小问题,缓存页面引用的文件(如js、img)还是远程路径。 实在没别的办法,只能先读出页面内容,再挨个替换内部元素路径为缓存路径了。 本帖现在科普+散分。 没人回连结贴都不行~

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧