【发布时间】:2010-04-05 10:03:48
【问题描述】:
我收到一些用户的报告,当从某些服务器(MS FTP)使用 idFTP.List() 时,列表被接收为空(无文件),而实际上有(非隐藏)当前目录中的文件。这可能是缺少解析器的情况吗?有趣的想法是,当我使用该程序从我的服务器(W2003 上的 MSFTP)获取列表时,一切似乎都很好,但在某些服务器上我遇到了这个问题。
在 D2010 上使用最新的 Indy10。有什么想法吗?
【问题讨论】:
我收到一些用户的报告,当从某些服务器(MS FTP)使用 idFTP.List() 时,列表被接收为空(无文件),而实际上有(非隐藏)当前目录中的文件。这可能是缺少解析器的情况吗?有趣的想法是,当我使用该程序从我的服务器(W2003 上的 MSFTP)获取列表时,一切似乎都很好,但在某些服务器上我遇到了这个问题。
在 D2010 上使用最新的 Indy10。有什么想法吗?
【问题讨论】:
IdFTPListParseWindowsNT 已损坏。
CheckListing 函数由于解析错误而返回 false:
if sDir = ' <DI' then begin {do not localize}
sDir := Copy(SData, 27, 5);
end else begin
sDir := Copy(SData, 26,28); <---------------BAD PASRSING
Result := TextStartsWith(sDir,' <DI') or IsNumeric(TrimLeft(sDir));
if not Result then begin
Exit;
end;
end;
评论这部分以使其像旧版本一样工作
if sDir = ' <DI' then begin {do not localize}
sDir := Copy(SData, 27, 5);
end;
{ else begin
sDir := Copy(SData, 26,28); <---------------BAD PASRSING
Result := TextStartsWith(sDir,' <DI') or IsNumeric(TrimLeft(sDir));
if not Result then begin
Exit;
end;
end;}
显示可以解决您的问题。不过,不知道为什么要引入此更改。
【讨论】:
这通常是由于目录列表中出现意外情况导致列表解析器失败。 IIS 可能同时支持 NT 风格和 Unix 风格的目录列表,因此请确保在应用程序中同时包含列表解析器并使用IdFTPLaistParse.pas::CheckListing 在它们之间进行选择。如果这没有帮助,那可能是一个愚蠢的日期或文件名中的某个东西;调试它的最佳方法是添加代码以将原始目录列表保存到文件中,以便最终用户可以向您发送副本。
【讨论】:
你确定你真的可以建立数据连接吗?直接列出命令通常是第一次请求此类列表的情况,如果您处于错误模式,则通常是发生故障的点(即数据通道连接超时)。
【讨论】: