Delphi 获取Internet缓存文件 -- FindFirstUrlCacheEntry FindNextUrlCacheEntry

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

需要引用

[delphi]view plaincopy

  1. WinInet

[delphi]view plaincopy

  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