有人用TIdFtp连过SUN的Solaris8吗?为什么用Size()取得的文件大小是-1?连接HP、SCO UNIX等都是好的。目录绝对没错。比较了一下几个OS的文件列表有点不一样:SUN Solaris 8:
drwxr-x--x   4 sybase   staff        512 2004   6月 25 jConnect_docs其他UNIX:
-rw-r-----   1 sybase   gsybase    46497 Jun 29  2000 index.ddl如何解决Size()的问题?如何指定IdFtp对SUN的含中文的文件列表正确解析?

解决方案 »

  1.   

    修改Indy的关于FTP处理的单元IdFTPList.pas就OK的
    Size方法是IdFTP.pas的,很容易解决的提供测试地址吧~http://lysoft.7u7.net
      

  2.   

    原来你就是LYFTP的作者,大名鼎鼎。
    不好意思,我是用CB的,对Pascal不太熟,刚看了一下.PAS,Size方法没看懂
    function TIdFTP.Size(const AFileName: String): Integer;
    var
      SizeStr: String;
    begin
      result := -1;
      if SendCmd('SIZE ' + AFileName) = 213 then begin  {Do not translate}
        SizeStr := Trim(LastCmdResult.Text.Text);
        system.delete(SizeStr, 1, IndyPos(' ', SizeStr)); // delete the response   {Do not translate}
        result := StrToIntDef(SizeStr, -1);
      end;
    end;
    其中SendCmd是干吗的?
      

  3.   

    SendCMD就是发送指令,以回车为结束的
    然后等待服务器的响应,其响应都是命令行格式的你的代码,最大的问题在于,Size后,服务器返回了什么信息
    一般是
    size default.htm
    213 8665

    size a.a
    550 /a.a no such fileIndy就靠解析213 8665获得Default.htm文件的大小为8665Bytes的http://lysoft.7u7.net
      

  4.   

    程序中返回 -1
    SIZE命令是发给FTP服务器的吗?在命令行窗口输入size提示Invalid Command