我在网上下载了FTPClient.cs类并作了一个简单的FTP下载上传的例子。但奇怪的是连接windows 2003 iis自带的ftp一切功能正常,但连接Serv-U的ftp时调用Dir()函数却老是出错,我是把iis ftp上根目录下的文件拷到Serv-U ftp的根目录下的。文件名上的问题应该是不会有的。
FTPClient.cs类是http://jhtchina.cnblogs.com/articles/367501.html上下载的。

解决方案 »

  1.   

    ftp的目录列表没有统一的格式,你用的软件没有能处理所有情况。
      

  2.   

    由于历史原因,ftp以前是靠直接敲命令连接的,而且得到目录信息的命令比较特殊,所以返回的目录信息只要人能识别就可以了,格式虽然大同小异,但区别还是很多的
      

  3.   

    你可以用telnet工具看看返回的目录信息:用telnet工具模拟此过程,在cmd里输入telnet 127.0.0.1 21,ftp服务器用Serv-U
    收到220 Serv-U FTP Server v6.1 for WinSock ready...
    发送user 1//用户名
    收到331 User name okay, need password.
    发送pass 1//密码
    收到230 User logged in, proceed.
    发送pasv
    收到227 Entering Passive Mode (127,0,0,1,15,224)
    新的连接是127.0.0.1:15*256+224,及127.0.0.1:4064。另起一个cmd,telnet 127.0.0.1 4064
    继续在第一个telnet连接中发送
    发送list
    收到150 Opening ASCII mode data connection for /bin/ls.
        226 Transfer complete.
    在第二个telnet连接中收到列表信息:drw-rw-rw-   1 user     group           0 Feb 23 11:48 .
    drw-rw-rw-   1 user     group           0 Feb 23 11:48 ..
    -rw-rw-rw-   1 user     group       26878 Dec  8 11:04 11.txt
    drw-rw-rw-   1 user     group           0 Dec  8 16:43 99
      

  4.   

    不可能吧,pasv是最基本的命令了,传输文件全靠它。还有一种是port模式,我没用过。你的Serv-U是什么版本啊
      

  5.   

    是我搞错了,我对比了一下两个list,的确目录结构不同。
      

  6.   

    目录结构不一样,会对nlst命令产生影响吗?我下载的FTPClient.cs类就是用了nlst命令列出文件名列表。
      

  7.   

    是ftp服务器对list命令返回的结果的格式不一样
      

  8.   

    我直接在cmd窗口中输入"nlst 文件名"然后回车,不论是iis的ftp还是Serv-U的ftp都可以将匹配的文件名显示在列表中,但在代码中执行则一个可以,另一个不行。