⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpclient.~pas

📁 delphi编写的简单FTP程序
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
  ListViewLocalFile.ViewStyle:=vsList;
end;

procedure TFrmMain.DetailClick(Sender: TObject);
begin
  ListViewLocalFile.ViewStyle:=vsReport;
end;

procedure TFrmMain.ListViewLocalFileContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
begin
  if ListViewLocalFile.Selected = nil then    //没有选中项目
  begin
    //设置弹出菜单是否可用
    LocalDeleteFile.Enabled:=False;
    LocalCreateDirectory.Enabled:=true;
    BigIcon.Enabled:=true;
    SmallIcon.Enabled:=true;
    List.Enabled:=True;
    Detail.Enabled:=True;
    UpLoadFile.Enabled:=False;
  end
  else begin
    //设置弹出菜单是否可用
    LocalCreateDirectory.Enabled:=False;
    BigIcon.Enabled:=False;
    SmallIcon.Enabled:=False;
    List.Enabled:=False;
    Detail.Enabled:=False;
    if ListViewLocalFile.Selected.SubItems[0] <> '' then   //是否选中文件?
    begin
      UpLoadFile.Enabled:=False;
      LocalDeleteFile.Enabled:=False;
    end
    else
    begin
      UpLoadFile.Enabled:=True;
      LocalDeleteFile.Enabled:=True;
    end;
  end;
end;

//上传文件
procedure TFrmMain.UploadFileClick(Sender: TObject);
var
  FileName : String;
  Item : TListItem;
  SendFileItem : TListItem;
begin
  if not FTPClient.Connected Then      //没有连接到服务器,退出
    Exit;
  if ListViewLocalFile.Selected = nil then   //没有选中文件,退出
    Exit;
  Item := ListViewLocalFile.Selected;      //得到选中的文件
  ListViewSendFile.Clear;        //清空要传送的文件列表
  //处理所有选中文件
  while Item <> nil do
  begin
    //列表项赋值
    SendFileItem := ListViewSendFile.Items.Add;   //增加到列表
    SendFileItem.Caption := Item.Caption;   //文件名
    SendFileItem.SubItems.Add(Item.SubItems[1]);  //文件大小
    SendFileItem.SubItems.Add(LocaLPath);   //本地路径
    SendFileItem.SubItems.Add('==>');       //图示
    SendFileItem.SubItems.Add(RemotePath);  //远程路径
    SendFileItem.SubItems.Add('');        //状态
    Item:=ListViewLocalFile.GetNextItem(Item,sdAll, [isSelected]);   //下一个选中的项目
  end;
  ListViewSendFile.Refresh;     //刷新传送文件列表

  //传送文件
  ListViewLocalFile.Enabled:=false;   //禁止操作相关控件
  DriveComboBox1.Enabled:=false;
  ListViewRemoteFile.Enabled:=False;
  IsTransferring:=True;          //设置正在传送
  try
    //处理所有要传送的文件
    while ListViewSendFile.Items.Count > 0 do
    begin
      FileName:=ListViewSendFile.Items[0].Caption;       //文件名
      ListViewSendFile.Items[0].SubItems[4]:='正在上传...';
      FTPClient.Put(LocalPath+'\'+FileName, FileName);  //上传
      DisplayRemoteFileList();
      ListViewSendFile.items[0].Delete;   //传送完毕,删除待传文件列表
      ListViewSendFile.Refresh;;
    end;
    //设置相关控件是否可用
    ListViewLocalFile.Enabled:=True;
    DriveComboBox1.Enabled:=True;
    ListViewRemoteFile.Enabled:=True;
    IsTransferring:=False;   //没有传送状态
  except
    ListViewSendFile.Items[0].SubItems[4]:='上传错误';
    MessageDlg('上传文件发生错误!',mtError, [mbYes],0);
    //设置相关控件是否可用
    ListViewLocalFile.Enabled:=True;
    DriveComboBox1.Enabled:=True;
    ListViewRemoteFile.Enabled:=True;
    IsTransferring:=False;   //没有传送状态
  end;
end;

procedure TFrmMain.ListViewRemoteFileContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
begin
  if ListViewRemoteFile.Selected = nil then   //没有选中项目
  begin
    //设置弹出菜单是否可用
    RemoteCreateDirectory.Enabled:=True;
    DownLoadFile.Enabled:=False;
    RemoteRenameFile.Enabled:=False;
    RemoteDeleteFile.Enabled:=False;
  end
  else
  begin
    //设置弹出菜单是否可用
    RemoteCreateDirectory.Enabled:=False;
    RemoteRenameFile.Enabled:=true;
    RemoteDeleteFile.Enabled:=True;
    if ListViewRemoteFile.Selected.SubItems[0] <> '' then      //是否选中文件?
    begin
      DownLoadFile.Enabled:=False;
      RemoteRenameFile.Enabled:=False;
    end
    else
    begin
      downloadFile.Enabled:=True;
      if ListViewRemoteFile.SelCount=1 then
        RemoteRenameFile.Enabled:=True
      else
        RemoteRenameFile.Enabled:=False;
    end;
  end;
end;

procedure TFrmMain.DownloadFileClick(Sender: TObject);
var
  FileName : String;
  Item ,  SendFileItem : TListItem;
begin
  if not FTPClient.Connected Then  //没有连接到服务器,退出
    Exit;
  if ListViewRemoteFile.Selected = nil then  //没有选中文件,退出
    Exit;
  Item := ListViewRemoteFile.Selected;  //得到选中的文件
  ListViewSendFile.Clear;  //清空要传送的文件列表
  //处理所有选中文件
  while Item <> nil do
  begin
    SendFileItem := ListViewSendFile.Items.Add;  //增加到列表
    //列表项赋值
    SendFileItem.Caption := Item.Caption;  //文件名
    SendFileItem.SubItems.Add(Item.SubItems[1]);  //文件大小
    SendFileItem.SubItems.Add(LocaLPath); //本地路径
    SendFileItem.SubItems.Add('<==');     //图示
    SendFileItem.SubItems.Add(RemotePath);  //远程路径
    SendFileItem.SubItems.Add('');        //状态
    Item:=ListViewRemoteFile.GetNextItem(Item,sdAll, [isSelected]);      //下一个选中的项目
  end;
  ListViewSendFile.Refresh;    //刷新传送文件列表

  //传送文件
  ListViewRemoteFile.Enabled:=false;  //禁止操作相关控件
  IsTransferring:=True;       //设置正在传送
  try
    //处理所有要传送的文件
    while ListViewSendFile.Items.Count > 0 do
    begin
      FileName:=ListViewSendFile.Items[0].Caption;     //文件名
      ListViewSendFile.Items[0].SubItems[4]:='正在下载...';
      ListViewSendFile.Refresh;       //刷新传送文件列表
      if FileExists(FileName) then   //判断文件是否存在
      begin
        if MessageDlg('文件已存在,继续下载吗?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
          FTPClient.Get(FileName, LocalPath+'\'+FileName,false, true)  //续传
        else
          FTPClient.Get(FileName, LocalPath+'\'+FileName, true,False);  //覆盖
      end
      else
        FTPClient.Get(FileName, LocalPath+'\'+FileName, false);      //下载
      ListViewSendFile.items[0].Delete;   //传送完毕,删除待传文件列表
      ListViewSendFile.Refresh;    //刷新待传文件列表
      DisplayLocalFileList();      //刷新本地文件列表
    end;
    ListViewRemoteFile.Enabled:=True;
    IsTransferring:=False;    //没有传送状态
  except
    ListViewSendFile.Items[0].SubItems[4]:='下载错误';
    ListViewSendFile.Refresh;    //刷新待传文件列表
    MessageDlg('下载文件发生错误!',mtError, [mbYes],0);
    ListViewRemoteFile.Enabled:=True;
    IsTransferring:=False;      //没有传送状态
  end;
end;

procedure TFrmMain.RemoteCreateDirectoryClick(Sender: TObject);
var
  NewDirectory : String;
begin
  if not FTPClient.Connected then    //没有和服务器建立连接,退出
    exit;
  NewDirectory:= '新建文件夹';
  if InputQuery('新建服务器文件夹', '文件夹名字:', NewDirectory)=TRUE then    //提示输入新文件夹名
    if NewDirectory <> '' then
      try
        FTPClient.MakeDir(NewDirectory);    //创建新文件夹
        DisplayRemoteFileList();           //刷新服务器文件列表
      except
        MessageDlg('新建服务器文件夹发生错误!',mtError, [mbYes],0);   //出错提示信息
      end
    else
      MessageDlg('文件夹名称不能为空!',mtError, [mbYes],0);   //出错提示信息
end;

procedure TFrmMain.RemoteDeleteFileClick(Sender: TObject);
Var
  Item : TListItem;
begin
  if not FTPClient.Connected then  //没有建立连接,退出
    exit;
  if ListViewRemoteFile.Selected = nil then    //没有选中文件,退出
    exit;
  if MessageDlg('确认删除这些文件?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
  begin
    Item := ListViewRemoteFile.Selected;  //选择的文件
    //    处理所有选中的文件
    while Item <> nil do
    begin
      if  Item.SubItems[0] = '文件夹' then  //是文件夹,删除文件夹
        FTPClient.RemoveDir(Item.Caption);
      if  Item.SubItems[0] = '' then       //是文件,删除文件
        FtpClient.Delete(Item.Caption);
      Item:=ListViewRemoteFile.GetNextItem(Item,sdAll, [isSelected]);  //得到下一个选中的文件
    end;
    DisplayRemoteFileList();   //刷新服务器文件列表
  end;
end;

procedure TFrmMain.LocalCreateDirectoryClick(Sender: TObject);
var
  NewDirectory : String;      //临时文件夹名
begin
  NewDirectory:= '新建文件夹';
  if InputQuery('新建本地文件夹', '文件夹名字:', NewDirectory)=TRUE then     //提示输入新文件夹名
    if NewDirectory <> '' then
      try
        CreateDir(NewDirectory);         //在当前路径创建新文件夹
        DisplayLocalFileList();          //刷新列表
      except
        MessageDlg('新建本地文件夹发生错误!',mtError, [mbYes],0);   //出错提示信息
      end
    else
      MessageDlg('文件夹名称不能为空!',mtError, [mbYes],0);   //出错提示信息
end;

procedure TFrmMain.FormShow(Sender: TObject);
begin
  //初始化变量
  IsTransferring :=False;   //未传送文件状态
end;

procedure TFrmMain.LocalDeleteFileClick(Sender: TObject);
var
  Item : TListItem;
begin
  if ListViewLocalFile.Selected = nil then  // 没有选择文件,退出
    Exit;
  if MessageDlg('确认删除这些文件?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
  begin
    Item := ListViewLocalFile.Selected;  //选择的文件
    //    处理所有选中的文件
    while Item <> nil do
    begin
      DeleteFile(LocalPath+'\'+Item.Caption);   //删除该文件
      Item:=ListViewLocalFile.GetNextItem(Item,sdAll, [isSelected]);  //得到下一个选中的文件
    end;
    DisplayLocalFileList();   //刷新本地文件列表
  end;
end;

procedure TFrmMain.RemoteRenameFileClick(Sender: TObject);
var
  NewFileName : String;
begin
  if not FTPClient.Connected then    //没有和服务器建立连接,退出
    exit;
  NewFileName:= ListViewRemoteFile.Selected.Caption;
  if InputQuery('重命名', '新文件名:', NewFileName)=TRUE then    //提示输入新文件名
    if NewFileName <> '' then
      try
        FTPClient.Rename(ListViewRemoteFile.Selected.Caption,NewFileName);    //重命名
        DisplayRemoteFileList();           //刷新服务器文件列表
      except
        MessageDlg('重命名文件发生错误!',mtError, [mbYes],0);   //出错提示信息
      end
    else
      MessageDlg('文件名称不能为空!',mtError, [mbYes],0);   //出错提示信息
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -