• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

用delphi写下载程序

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdFTP, ComCtrls,md5;

type
  TForm1 = class(TForm)
    IdFTP1: TIdFTP;
    Button1: TButton;
    Button2: TButton;
    ProgressBar1: TProgressBar;
    m_Log: TMemo;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
{===========================================================
                  FTP 文件下载程序   2002-07-03 Hanfi

功能:下在指定目录下的所有文件(不包含子目录)
输入:Telecom.ini 文件的[FTP]段
输出:下载文件保存至当前目录下

设置Telecom.ini文件的[FTP]段
[ftp]
system=UNIX         //设置目标服务器类型  UNIX,DOS
IP=127.0.0.1        //设置目标服务器的IP地址
USER=guest          //设置下载用户名
PASSWORD=guest      //设置下载用户密码(应将此部分加密)
SERVERPATH=/app/download   //设置下载目录

===========================================================}
implementation
{$R *.dfm}


var
// 服务器信息变量
  S_System,S_Host,S_Pass,S_User,S_Dir: String;
  S_Files:TStrings;
procedure TForm1.FormCreate(Sender: TObject);
var
  ServerIni: TIniFile;
begin
  Top:=(Screen.Height-Height) div 2;
  Left:=(screen.Width-width) div 2;
  ServerIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'telecom.ini');
  S_System:= ServerIni.ReadString('Ftp', 'SYSTEM', 'UNIX');
  S_Host:= ServerIni.ReadString('Ftp', 'IP', 'IP');
  S_User:=ServerIni.ReadString('Ftp', 'USER', 'USER');
  S_Pass:=ServerIni.ReadString('Ftp', 'PASSWORD', 'Password');
  S_Dir:=ServerIni.ReadString('Ftp', 'SERVERPATH', '/app/download');
  ServerIni.Free;
  with IdFTP1 do try
        Button1.Enabled := False;
        User := S_User;
        Password := S_Pass;
        Host :=  S_Host;
  finally
        Button1.Enabled := true;
  end;
end;

function GetNameFromDirLine(Line: String; Var IsDirectory: Boolean): String;
Var
//在字符串中取得文件名
  i: Integer;
  DosListing: Boolean;
begin
  IsDirectory := Line[1] = 'd';
  DosListing := false;
  for i := 0 to 7 do begin
  if (i = 2) and not IsDirectory then begin
  IsDirectory := Copy(Line, 1, Pos(' ', Line) - 1) = '<DIR>';
  if not IsDirectory then
  DosListing := Line[1] in ['0'..'9']
  else DosListing := true;
  end;
  Delete(Line, 1, Pos(' ', Line));
  While Line[1] = ' ' do Delete(Line, 1, 1);
  if DosListing and (i = 2) then break;
  end;
  Result := Line;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  name,Line: String;
  i:integer;
  IsDirectory: Boolean;
  i_Start:integer;
begin
  Button1.Enabled:=False;
  Button2.Enabled:=False;
  m_Log.Lines.Clear;
  if not IdFTP1.Connected then
  begin
      m_Log.Lines.Add('## 开始下载任务');
      m_Log.Lines.Add('=========================================');
      try
        IdFTP1.Connect;
        IdFTP1.ChangeDir(S_Dir);
        IdFTP1.TransferType := ftASCII;
        S_Files:=TStringList.Create;
        IdFTP1.List(S_Files);
        m_Log.Lines.Add('');
        m_Log.Lines.Add('## '+datetimetostr(Now)+' 连接服务器'+S_Host+'成功!');
        m_Log.Lines.Add('');
      except
        Button1.Enabled:=True;
        Button2.Enabled:=True;
        Button2.SetFocus;
        m_Log.Lines.Add('');
        m_Log.Lines.Add('## '+datetimetostr(Now)+' 连接服务器失败!');
        m_Log.Lines.Add('');
        m_Log.Lines.Add('=========================================');
        m_Log.Lines.Add('## 数据下载失败');
        m_Log.Lines.SaveToFile('log_'+datetimetostr(Date())+'.log');
        m_Log.Lines.Add('## 数据下载完毕,生成日志文件:log_'+datetimetostr(Date())+'.log');
        exit;
      end;
  end;

  ProgressBar1.Position:=0;
  ProgressBar1.Max:=S_Files.Count;
  ProgressBar1.Min:=0;
  ProgressBar1.Step:=1;
  if S_System='UNIX' then
        i_Start:=1
  else
        i_Start:=0;
  for i:=i_Start to S_Files.Count-1 do
  begin
        Line := S_Files[i];
        Name:=GetNameFromDirLine(Line, IsDirectory);
        if not IsDirectory then
        begin
            try
                IdFTP1.TransferType := ftBinary;
                IdFTP1.Get(Name, Name, true);
                ProgressBar1.StepIt;
                m_Log.Lines.Add('文件:'+Name+' 下载完成;');
            except
                m_Log.Lines.Add('下载:'+Name+' 失败,无法覆盖本地  '+Name+' 文件;');
            end;
        end;

  end;
  try
      ProgressBar1.Position:=ProgressBar1.Max;
      Button1.Enabled:=True;
      Button2.Enabled:=True;
      Button2.SetFocus;
      m_Log.Lines.Add('=========================================');
      IdFTP1.Disconnect ;
      m_Log.Lines.Add('## '+datetimetostr(Now)+' 断开服务器连接!');
      m_Log.Lines.SaveToFile('log_'+datetimetostr(Date())+'.log');
      m_Log.Lines.Add('## 数据下载完毕,生成日志文件:log_'+datetimetostr(Date())+'.log');
  except
      m_Log.Lines.SaveToFile('Err.log');
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    close;   
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
    S_Files.Free;
end;
end.[/code]

附录: telecom.ini
[ftp]
SYSTEM=UNIX
IP=127.0.0.1
USER=guest
PASSWORD=guest
SERVERPATH=/app/download

使用 D6 中的 TIdFTP 控件,DEMO中有完整的例子


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi提示:ListIndexoutOfbounds(5)发布时间:2022-07-18
下一篇:
奇淫怪巧之在Delphi中调用不申明函数发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap