zoukankan      html  css  js  c++  java
  • Delphi 获取Internet缓存文件 -- FindFirstUrlCacheEntry FindNextUrlCacheEntry

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

    需要引用

    [delphi] view plain copy
     
    1. WinInet  
    [delphi] view plain copy
     
    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.   // 获取缓冲区大小  
    11.   lEntrySize := 0;  
    12.   lCacheDir := FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^),  
    13.     lEntrySize);  
    14.   if lEntrySize = then  
    15.     Exit;  
    16.   // 分配内存  
    17.   GetMem(pEntryInfo, lEntrySize);  
    18.   // 获取缓存文件  
    19.   lCacheDir := FindFirstUrlCacheEntry(nil, pEntryInfo^, lEntrySize);  
    20.   if lCacheDir = then  
    21.   begin  
    22.     FreeMem(pEntryInfo, lEntrySize);  
    23.     Exit;  
    24.   end;  
    25.   
    26.   Result := TStringList.Create;  
    27.   
    28.   // 开始遍历  
    29.   while True do  
    30.   begin  
    31.     try  
    32.       Result.Add(string(StrPas(pEntryInfo^.lpszLocalFileName)));  
    33.     except  
    34.     end;  
    35.     // 释放内存  
    36.     FreeMem(pEntryInfo, lEntrySize);  
    37.     // 获取下一个缓冲区大小  
    38.     lEntrySize := 0;  
    39.     FindNextUrlCacheEntry(lCacheDir, TInternetCacheEntryInfo(nil^), lEntrySize);  
    40.     // 分配内存  
    41.     if GetLastError() = ERROR_INSUFFICIENT_BUFFER then  
    42.       GetMem(pEntryInfo, lEntrySize)  
    43.     else  
    44.       Break;  
    45.     // 下一个缓存文件  
    46.     FindNextUrlCacheEntry(lCacheDir, pEntryInfo^, lEntrySize);  
    47.   end;  
    48.   
    49.   // 关闭缓存  
    50.   FindCloseUrlCache(lCacheDir);  
    51.   
    52. 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

  • 相关阅读:
    autocad.net 利用linq获取矩形框内的块参照
    autocad.net 只在图纸空间遍历块的方法
    autocad.net中判断当前被激活的空间
    计划搞一个程序来应对客户的修改标记问题
    条件编译解决AutoCAD多版本问题
    初学者往往不知道怎么获得断点,请看下面的链接应该可以解决你的问题!
    2014年3月9日正式入住博客园
    学习:SpringCloud(一)
    简单使用:SpringBoot整合Redis
    Redis 使用过程中遇到的具体问题
  • 原文地址:https://www.cnblogs.com/findumars/p/4430733.html
Copyright © 2011-2022 走看看