2

一部のユーザーから、一部のサーバー (MS FTP) から idFTP.List() を使用すると、実際には (非表示でない) ファイルがあるのに、リストが空 (ファイルなし) として受信されるという報告を受けています。カレントディレクトリ。これは、パーサーが欠落している可能性がありますか? プログラムを使用してMYサーバー(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 に答える