📄 ftpclient.~pas
字号:
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 + -