2

我收到一些用户的报告,当从某些服务器(MS FTP)使用 idFTP.List() 时,列表被接收为空(无文件),而实际上有(非隐藏)文件当前目录。这可能是缺少解析器的情况吗?有趣的想法是,当我使用程序从我的服务器(W2003 上的 MSFTP)获取列表时,一切似乎都很好,但在某些服务器上我一直遇到这个问题。

在 D2010 上使用最新的 Indy10。任何的想法?

4

3 回答 3

2

这通常是由目录列表中的某些意外导致列表解析器失败引起的。IIS 可能同时支持 NT 样式和 Unix 样式的目录列表,因此请确保在应用程序中同时包含列表解析器并使用IdFTPLaistParse.pas::CheckListing. 如果这没有帮助,那可能是一个愚蠢的日期或文件名中的某个东西;调试它的最佳方法是添加代码以将原始目录列表保存到文件中,以便最终用户可以向您发送副本。

于 2010-04-05T15:33:54.457 回答
2

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;}

可以解决你的问题。不过,不知道为什么要引入此更改。

于 2010-04-06T15:48:59.833 回答
0

你确定你真的可以建立数据连接吗?直接列出命令通常是第一次请求这样的列表,如果您处于错误的模式,通常是发生故障的点(即数据通道连接超时)。

于 2010-04-06T13:55:40.953 回答