Indy 10 FTP空列表

时间:2010-04-05 10:03:48

标签: delphi indy

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

在D2010上使用最新的Indy10。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;}

Showuld解决您的问题。但不知道为什么会引入这种改变。

答案 2 :(得分:0)

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