下面是我写的一个函数,把所有的缓存文件路径添加到一个字符串列表中,直接看代码,带了注释。另外还有删除缓存等等大家自己到msdn找找。

需要引用

  1. WinInet
  1. // 获取Internet缓存文件
  2. function GetCacheFilePath(): TStringList;
  3. var
  4. pEntryInfo: PInternetCacheEntryInfo;
  5. lCacheDir, lEntrySize, lLastError: Cardinal;
  6. bLoop: Boolean;
  7. begin
  8. Result := nil;
  9. // 获取缓冲区大小
  10. lEntrySize := 0;
  11. lCacheDir := FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^),
  12. lEntrySize);
  13. if lEntrySize = 0 then
  14. Exit;
  15. // 分配内存
  16. GetMem(pEntryInfo, lEntrySize);
  17. // 获取缓存文件
  18. lCacheDir := FindFirstUrlCacheEntry(nil, pEntryInfo^, lEntrySize);
  19. if lCacheDir = 0 then
  20. begin
  21. FreeMem(pEntryInfo, lEntrySize);
  22. Exit;
  23. end;
  24. Result := TStringList.Create;
  25. // 开始遍历
  26. while True do
  27. begin
  28. try
  29. Result.Add(string(StrPas(pEntryInfo^.lpszLocalFileName)));
  30. except
  31. end;
  32. // 释放内存
  33. FreeMem(pEntryInfo, lEntrySize);
  34. // 获取下一个缓冲区大小
  35. lEntrySize := 0;
  36. FindNextUrlCacheEntry(lCacheDir, TInternetCacheEntryInfo(nil^), lEntrySize);
  37. // 分配内存
  38. if GetLastError() = ERROR_INSUFFICIENT_BUFFER then
  39. GetMem(pEntryInfo, lEntrySize)
  40. else
  41. Break;
  42. // 下一个缓存文件
  43. FindNextUrlCacheEntry(lCacheDir, pEntryInfo^, lEntrySize);
  44. end;
  45. // 关闭缓存
  46. FindCloseUrlCache(lCacheDir);
  47. end;

http://blog.csdn.net/cwpoint/article/details/6438668

uses WinINet;

Function TForm1.GetCacheVerifyCodeFile(VerifyCodeURL:String; Var CacheVerifyCodeFile:String):Boolean;
Var
lpEntryInfo: PInternetCacheEntryInfo;
dwEntrySize, dwLastError, Hwd: LongWORD; 
i, j: Integer; 
f: String;
Begin
Result := false; 
dwEntrySize := 0; 
j := 0; 
CacheVerifyCodeFile := ''; 
FindFirstUrlCacheEntry(Nil, TInternetCacheEntryInfo(Nil^), dwEntrySize); 
GetMem(lpEntryInfo, dwEntrySize); 
Hwd := FindFirstUrlCacheEntry(Nil, lpEntryInfo^, dwEntrySize); 
If Hwd <> 0 Then 
Begin 
    Repeat 
      dwEntrySize := 0; 
      FindNextUrlCacheEntry(Hwd, TInternetCacheEntryInfo(Nil^), dwEntrySize); 
      dwLastError := GetLastError(); 
      If dwLastError = ERROR_INSUFFICIENT_BUFFER Then 
      Begin 
        GetMem(lpEntryInfo, dwEntrySize);
        If FindNextUrlCacheEntry(Hwd, lpEntryInfo^, dwEntrySize) Then
        begin
          If Pos(UpperCase(VerifyCodeURL), UpperCase(lpEntryInfo.lpszSourceUrlName)) > 0 Then
          Begin
            i := FileAge(lpEntryInfo.lpszLocalFileName);
            If i > j Then
            Begin
              j := i;
              f := lpEntryInfo.lpszLocalFileName;
            End
            Else
              DeleteUrlCacheEntry(lpEntryInfo.lpszSourceUrlName);
          End;
        end;
      End;
      Application.ProcessMessages;
    Until (dwLastError = ERROR_NO_MORE_ITEMS);

If FileExists(f) Then 
    Begin 
      CacheVerifyCodeFile := f;
      Result := true; 
    End; 
End;
FreeMem(lpEntryInfo);
FindCloseUrlCache(Hwd);
End;

可用于在缓存中的验证码图片,或者防盗链的图片的采集,嘿嘿。

此函数有两个参数,第一个是网络图片地址,第二个是本地缓存地址。第二个作为输出端口。

http://www.cnblogs.com/toosuo/archive/2010/09/02/1815583.html

Delphi 获取Internet缓存文件 -- FindFirstUrlCacheEntry FindNextUrlCacheEntry的更多相关文章

  1. 用程序获取 Internet 时间 无通用性程序后的暂用办法

    并不是完全失败,但没找到一个通用的办法,这个通用指的不能通用所有的时间服务器,而不是说操作系统. 网上的方案很多,有用Socket类.或TcpClient类(C#).或UdpClient类,端口有使用 ...

  2. Delphi 获取进程路径及命令行参数

    Delphi 获取进程路径及命令行参数, 但有的进程获取时会报错,不知为啥 type PVOID64 = UINT64; _UNICODE_STRING = packed record Length ...

  3. 随笔 - Internet缓存文件

    Internet缓存文件 本文地址: http://blog.csdn.net/caroline_wendy 互联网上全部的使用记录, 图片, 音乐, 视频, 都会缓存在本地. 1. 位置: IE-& ...

  4. delphi 获取硬盘序列号、cpu号、bios号、网卡号

    delphi 获取硬盘 序列号 function GetIdeNum: String; type TSrbIoControl = packed record HeaderLength : ULONG; ...

  5. Delphi 获取当前鼠标下的控件内容

    Delphi 获取当前鼠标下的控件内容 主要函数: GetCursorPos://获取鼠标的位置 WindowFromPoint://获取制定point下的handle GetClassName:// ...

  6. Delphi获取本机的MAC地址

    Delphi获取本机的MAC地址: uses   NB30; function GetAdaPterInfo(lana: Char): string; var   Adapter: TAdapterS ...

  7. Delphi获取其他exe程序版本号

    delphi获取Exe文件版本信息的函数 Type TFileVersionInfo = Record FixedInfo:TVSFixedFileInfo; {版本信息} CompanyName:S ...

  8. DELPHI获取宽带IP

    DELPHI获取宽带IP   DELPHI获取宽带IP procedure TForm1.Button1Click(Sender: TObject);varurl: string;beginurl : ...

  9. Delphi获取默认打印机名称及端口

    Delphi获取默认打印机名称及端口 在前段时间写的收银系统中由于目前市场上很多电脑主板上已经没有并口,而POS机却又需要并口,所以目前需要用PCI转接卡,这个就导致不同门店使用的端口就有可能不同,这 ...

随机推荐

  1. Uniform Server

    Uniform Server http://www.uniformserver.com/ https://sourceforge.net/projects/miniserver/files/ Unif ...

  2. 将 php 转换/编译为 EXE

    将 php 转换/编译为 EXE 本文仅仅是将原文用谷歌作了翻译,原文来源于 http://stackoverflow.com 资料来源  http://stackoverflow.com/quest ...

  3. php课程 12-40 抽象类的作用是什么

    php课程 12-40 抽象类的作用是什么 一.总结 一句话总结:定标准的 1.继承的关键词有哪两个? extendsparent 2.抽象类的实际意义是什么? 制造符合规范的产品你必须实现了抽象类里 ...

  4. golang 部分理解:关于channel 和 goroutine 例子

    部分理解:关于channel 和 goroutine 例子package main import "strconv" import "fmt" func mai ...

  5. Codefroces Round#427 div2

    A. Key races time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  6. 内核中的宏定义__init、__initdata和__exit、__exitdata

    __init.__initdata和__exit.__exitdata的定义位于<kernel/include/linux/init.h> /* These are for everybo ...

  7. [Javascript AST] 4. Continue: Report ESLint error

    const disallowedMethods = ["log", "info", "warn", "error", & ...

  8. 终于研究出如何设置新版paypal付款时汇率损失方的问题了

    http://bbs.55haitao.com/thread-1686005-1-1.html 终于研究出如何设置新版paypal付款时汇率损失方的问题了 登录paypal后,选"设置&qu ...

  9. Ext常用控件

    多选下拉框 var workname = new Ext.form.MultiSelect({ store: pointComboBoxStore, fieldLabel: '工作面', labelS ...

  10. Php无限层级并显示层级数

    今天在处理递归无限层级菜单时,遇到一个稍微烧脑的问题,如何显示当前节点所在的层级数.废话不多说,我们先看个直观的无限层级: <?php // 这里的arr是直接从数据库取出的,仅作为测试数据 $ ...