FtpList: An application to list all files and directories in a FTP server or a local computer. The result can be a tree or a URL list.
联系地址：stronghorse@163.net

FAQ
使用说明
附录A 鸣谢
附录B 版本更新记录

## FAQ

Q：FtpList是什么？
A：这是一个目录列表工具，能够列出FTP、本地磁盘上的目录内容，输出格式可以是树型图，也可以是URL列表。

Q：FtpList有什么用？
A：对于喜欢下载的人来说，如果某些FTP比较难连，可以用FtpList整理出这些FTP服务器的URL列表，然后把URL粘贴到FlashGet等下载工具中，这样就可以用比普通FTP工具更可靠、更执着的专业下载工具，一天24小时不停地进行重试，直到下载到为止。
对于FTP站点管理员或普通用户来说，可以用FtpList生成本地目录的树型图，便于管理、宣传。

Q：FtpList有什么特点？
A：FtpList具有以下特点：
1、采用底层FTP协议，发送一次FTP命令即可获得指定目录及其下所有子目录（包括隐含子目录）的全部信息，中间的所有目录切换工作由FTP服务器本身完成，不需要FtpList本身进行控制。因此不会象某些采用MFC中的FTP类，需要切换目录才能获得子目录信息的FTP列表工具一样，自己把自己折腾死，同时也减少了服务器端的负担。
2、支持firewall。
3、可选是否采用PASV模式。
4、支持站点列表，即如果需要经常访问某些站点，可以把站点的host/port、username/password存储起来，以后用的时候调入即可，省去输入的烦恼。
5、输出格式可选。

Q：FtpList有哪些限制？
A：FtpList不是万能的，存在以下限制：
1、据传说FtpList所发送的目录列表命令并不是所有FTP服务器都支持的，在这样的情况下FtpList将只能列出第一级目录。不过这样古老的服务器我至今也没有遇到过。
2、为了加快速度，FtpList从服务器收到的所有数据均存储在内存中，没有使用中间数据文件。如果站点较大、内容较多，内存可能消耗太多，影响到本程序及其它同时运行的程序的执行速度。因此在这种情况下，建议一次只列出FTP上的一个主目录，多列几次还是可以得到整个站点的信息的。
3、为了使编程简单话，采用了阻塞方式的socket连接，因此在服务器比较难连或网络传输速率比较低的时候，FtpList的反应可能会比较迟钝，这时需要耐心等待，不要轻易以为是程序死锁而强行终止。
4、为了省事，规定程序与FTP服务器建立连接后就不能半途终止，只有获取到全部目录信息或出错后才会自动终止。因此运行的时候请耐心等待。
5、为了加快显示树型图、URL列表的速度，显示前会在C盘根目录下会生成一个名为out.fls的临时文件，显示完成后自动删除。因此请保证C盘有足够的剩余空间。

Q：我需要为使用、转载FtpList付费吗？
A：FtpList是一个“友情软件”（Friendware），用户在承诺不用于商业目的，也不对文件及其附件进行任何更改的条件下，不需要为使用该软件负任何费用，最多是在动漫讨论区看到我发帖子灌水时，进去捧个人场，作为友情回报，或者在年节时发个email问声好（所以叫“友情软件”）。我承诺绝不在程序中暗藏任何商业广告、木马，但不承诺为使用FtpList的后果承担任何责任。如果您需要将它用于商业目的，或加入您的网站，请与我联系，否则保留追究一切责任的权利。

## 使用说明

一、获取FTP文件列表

在“FTP Server”框中，输入Host（服务器地址）、Port（端口）、User（用户名）、Password（密码）、Remote path（FTP上的起始目录），确定是否采用PASV方式。如果有防火墙（firewall），再点框中的“Firewall”按钮，在弹出的对话框中对防火墙进行设置。如果需要经常访问此站点，可以点框中的“Save”按钮保存，以后用的时候点“Load”按钮即可再调入。

“FTP Server”框中内容设置完成后，点外面的“Go”按钮即可开始获取目录信息。获取过程的中间信息会显示在窗口下方的信息框中。数据传输完成后，系统自动对收到的信息进行解释，然后显示出目录的树型结构。

如果希望在输出的树型图中只列出目录结构，而不包含目录中的文件，可以在“Output”框中清除“Show files”选项，然后点“Tree”按钮。如果希望在树型图中使用英文字符而不是中文字符，可以清除“Use Chinese character”选项，然后点“Tree”按钮。

如果希望输出FTP的URL列表，以便粘贴到FlashGet等下载工具中，可以点击“Output”框中的“URL”按钮。如果希望在URL中直接包含用户名和密码，可以在选中“With user and password”选项后再点“URL”按钮。

如果希望保存输出结果，点“Save”按钮，在弹出的对话框中选择目标文件即可。

二、获取本地目录列表

点击“Local”按钮，在弹出的对话框中选择需要列出的目录即可。对输出结果的处理同前。

## 附录A 鸣谢

本程序的FTP通讯部分参考了Phil Anderson在codeguru上发表的A simple FTP client class。

## 附录B 版本更新记录

Version 1.07
新增功能：用户可以选择是否采用PASV方式。
新增功能：将Go按钮设置为缺省按钮，即按回车键相当于点击Go按钮。
错误修正：在数据包边界部分，可能会因半个汉字而造成乱码。
错误修正：如果Remote Path不为空，该子目录下的文件和目录会被重复列出。
错误修正：某些包含特定字符的目录列不出来。

Version 1.06
功能增强：某些FTP服务器在返回目录信息的时候，可能会漏掉目录下的子目录信息，这时FtpList可以根据后面的信息重建目录树。

Version 1.05
anonymous首字母改成小写，与某些FTP服务器兼容。

Version 1.04
错误修正：非标准端口号在URL输出时位置不正确。

Version 1.03
错误修正：在选择“With user and password”后点URL，输出结果中的协议名称错误，并且不包含非标准端口号。

Version 1.02
1、修正Version 1.01的存盘错误。
2、采用中间文件进行过渡，加快显示速度。

Version 1.01
重新定义了部分数据结构及算法，减少内存消耗。

Version 1.00
能够列出FTP、本地目录的树型图、URL列表。