继续给上次编写的FluentFTP测试项目添加功能,主要包括下载文件、浏览下级文件夹、返回上级文件夹功能。
首先是下载FTP服务器中的文件功能,主要是调用FtpClient类中的DownloadFile函数,指定本地目的路径和FTP服务器中的源文件路径即可。示意图及下载结果如下所示:
接下来是浏览下级文件夹功能,主要还是调用GetListing函数获取指定文件夹内的文件清单。这个可以和下载文件合起来使用。双击测试项目中列出的FTP服务器文件清单,如果是文件,则提示用户下载文件,如果是文件夹,则显示选中文件夹内的文件清单。
这里稍微麻烦的是如果当前目录不是根目录(即当前工作目录不为‘/’),则应提供返回上一级功能,使用其它ftp软件时该功能是标准功能。简单一点的话在文件列表旁边提供返回上一级按钮或菜单,用户点击时可以查看当前文件夹上一级目录的内容。也可以把上一级目录作为一个文件夹放在文件列表中。本文中采用后者实现返回上一级功能。
显示文件清单用的ListView控件,每个ListViewItem关联了一个FtpListItem对象,在界面中只显示每个对象的类型和名称。如果需要下载文件或者浏览文件夹内容,则需要读取ListViewItem关联的FtpListItem对象中的FullName属性后再进行下一步操作。
实现返回上一级功能时需要在ListView控件中新增一条记录并关联FtpListItem对象,但是在创建过程中发现无法指定FtpListItem对象的Fullname属性,该属性为只读,FtpListItem的构造函数中也只能指定Name属性。应该再定义一个类保存FtpListItem的Name、FullName和Type属性,其它FtpListItem属性暂不需要保存,或者是在ListView控件中新增一列保存FullName值,本文测试时嫌麻烦,还是用的FtpListItem对象,将上一级文件夹的目录保存在Name属性中,调用GetListing时检查如果FullName为空则使用Name值。
同时FtpListItem返回的文件列表没有排序,文件和文件夹混杂在一起,为便于查看和点击,最好排一下序。
浏览下级文件夹、返回上级文件夹的功能示意图如下,从根目录双击文件夹浏览下一级内容,然后双击文件清单最上级的文件夹返回上一级目录。
参考文献:
[1]https://github.com/robinrodricks/FluentFTP
[2]https://github.com/robinrodricks/FluentFTP/wiki/Classes