【问题标题】:programatically extract the file name from a Download Link using delphi使用 delphi 以编程方式从下载链接中提取文件名
【发布时间】:2010-02-02 20:41:06
【问题描述】:

如何使用 Delphi 从下载链接中提取文件名

例子

http://pj-mirror01.mozilla.org/pub/mozilla.org/firefox/releases/3.6/win32/es-CL/Firefox%20Setup%203.6.exe

结果必须是

Firefox Setup 3.6.exe

【问题讨论】:

    标签: delphi


    【解决方案1】:

    试试这个

    function GetURLFilename(const FilePath:String;Const Delimiter:String='/'):String;
        var I: Integer;    
    begin    
        I := LastDelimiter(Delimiter, FILEPATH);
        Result := Copy(FILEPATH, I + 1, MaxInt);    
        Result := UrlDecode(Result);
    end;
    

    URlDecode 是从 http://www.torry.net/dpfl/dzurl.html 复制而来的,看起来像

    function UrlDecode(const EncodedStr: String): String;
    var
      I: Integer;
    begin
      Result := '';
      if Length(EncodedStr) > 0 then
      begin
        I := 1;
        while I <= Length(EncodedStr) do
        begin
          if EncodedStr[I] = '%' then
            begin
              Result := Result + Chr(HexToInt(EncodedStr[I+1]
                                           + EncodedStr[I+2]));
              I := Succ(Succ(I));
            end
          else if EncodedStr[I] = '+' then
            Result := Result + ' '
          else
            Result := Result + EncodedStr[I];
    
          I := Succ(I);
        end;
      end;
    end;
    
    function HexToInt(HexStr: String): Int64;
    var RetVar : Int64;
        i : byte;
    begin
      HexStr := UpperCase(HexStr);
      if HexStr[length(HexStr)] = 'H' then
         Delete(HexStr,length(HexStr),1);
      RetVar := 0;
    
      for i := 1 to length(HexStr) do begin
          RetVar := RetVar shl 4;
          if HexStr[i] in ['0'..'9'] then
             RetVar := RetVar + (byte(HexStr[i]) - 48)
          else
             if HexStr[i] in ['A'..'F'] then
                RetVar := RetVar + (byte(HexStr[i]) - 55)
             else begin
                Retvar := 0;
                break;
             end;
      end;
    
      Result := RetVar;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-12
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2012-01-10
      • 2017-08-26
      • 1970-01-01
      相关资源
      最近更新 更多