【问题标题】:Indy 10 FTP empty listIndy 10 FTP 空列表
【发布时间】:2010-04-05 10:03:48
【问题描述】:

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

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

【问题讨论】:

    标签: delphi indy


    【解决方案1】:

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

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

    【讨论】:

    • 新版本的IdFTPListParseWindowsNT已签入,能否验证问题是否已修复?
    【解决方案2】:

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

    【讨论】:

    • 谢谢克雷格。是的,我在我的单元中使用了 IdAllFTPListParsers.pas,在我更新到 Indy tiburon 之前,它在相同的服务器上运行良好。我得到的原始列表是 03-31-10 06:55PM 1458176 SOME_FILE.mdb,这对我来说似乎很标准。我将尝试调试,看看为什么没有解析器选择它。
    【解决方案3】:

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

    【讨论】:

    • 是的,我得到了原始列表,但似乎没有一个解析器能找到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2012-01-09
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2021-08-12
    相关资源
    最近更新 更多