IdFTP问题求教(100分)

  • 主题发起人 主题发起人 Sachow
  • 开始时间 开始时间
S

Sachow

Unregistered / Unconfirmed
GUEST, unregistred user!
现在做了个FTP客端程序要从一台装AIX 4的IBM RS6000小型机上取文件,原来程序开发阶段是在一台装Serv-U的Win2000服务器下开发的,但程序要投入应用时发现无法从RS6000服务器上取数据,每当执行IdFTP的List方法时就会抛出一个异常:“550 Bad Directory components”。

我发现导致这个异常的原因是在该目录中没有找到相应的文件,但令人不可接受的是仅因为找不到文件就被异常终止了程序,那还怎么玩呢!

我估计解决方法有几个,一是把IdFTP中的异常开关关闭——但我没有找到这样的开关;二是在AIX上做些设置,但据说AIX 4连把用户锁定在目录里都做不到,这个就怕是更没有什么可设的了。

在此向大家急征解决方案。
 
你在操作一个文件之前,最好先查看返回的文件列表中,有没有这个文件。
idFTP只是一个控件,里面的好多控制还要你自己写的。
 
IdFTP1.List(Memo1.Lines, 'OLDrec20031030*.call', false);
执行这里,如果目录中没有相关文件的时候,服务器就要返回代码550,IdFTP就要报异常!
这应该是IdFTP的问题,不知Indy 9里面的会不会好点。
 
你为什么要直接读指定的文件?你可以先读取所有文件的列表,再判断文件存在与否啊.
这个不是别人控件的问题。是你自己要加错误控制的。
 
一个目录下有数千至上万个文件,如果一次读出全部的文件名的话就要将近10秒钟(由于网络不是太快),总共要读取近50个目录,这样一来程序处理速度太慢了!
 
你可以截获550引起的异常,然后自己处理。
也就是如果server返回550,就提示用户找不到这个文件就行了。
550错误是ftp server返回的最多的一个错误代码,又很多原因会引起这个问题
 
我最终是用捕获异常的方式解决的。
 
后退
顶部