如何从文件夹中分离文件?

时间:2010-01-05 14:06:35

标签: delphi ftp delphi-2007

我有一个简单的问题。我的(带有Indy 9的Delphi 2007)应用程序连接到FTP服务器以检索文件列表。 (NLST,而不是LIST)然后我单独下载每个文件以进行进一步处理。

不幸的是,FTP站点的管理员在文件所在的文件夹中添加了一个子文件夹。当前代码认为它是一个文件,因此它试图下载它。当然,这失败了。现在,我刚刚通过检查进程是否成功解决了问题,如果没有,它会向错误日志添加一条消息,但它也会继续处理其他文件。

但我想要做的是添加一些代码,首先检查文件列表中的名称是文件名还是foldername。最简单的方法是什么?

注意:我不能依赖LIST方法返回带有附加属性的文件列表,因为我连接到多个FTP服务器,这些服务器都可以定义自己的文件格式。此外,即使我可以确定FTP服务器返回哪种列表,解析这样的列表也不是一件容易的事。更糟糕的是,一些文件名只是没有扩展名的数字,所以通配符也无济于事。

1 个答案:

答案 0 :(得分:2)

NLST命令未按设计提供有关其提供的名称的任何详细信息。必须使用LIST或MLSD / MLST命令获取详细信息,以便区分不同的项类型。是的,当使用LIST时,在线使用了许多不同的格式,您必须根据需要手动检测和解码它们(例如,Indy 10中的TIdFTP组件有几十个解析器,仅用于此目的)。这就是发明MLST / MLST扩展的原因。它专门设计为具有统一格式,可以在代码中轻松解析而无需任何猜测。许多现代FTP服务器都支持该扩展。