0

FTPサーバー上のディレクトリから最も古いファイルをダウンロードしたい。

FtpWebrequestディレクトリ内のファイルのリストを取得するために FTP サーバーに接続しています。私WebRequestMethods.Ftp.ListDirectoryDetailsはそうするのが常です。ファイル名がわかったら、別の FTP 接続を作成してそのファイルをダウンロードします。

ただし、FtpWebResponseストリームで取得した詳細は、FTP が Linux 上にある場合と Windows 上にある場合で異なる形式になります。

  1. この問題に対処するには?
  2. 応答ストリームを解析する Linux と Windows 用のさまざまなメソッドを作成できます。しかし、そのためには、少なくとも Linux Ftp と Windows FTP が詳細を提供する方法は明確でなければなりません。詳細が送信される方法が Linux FTP サーバーごとに異なる可能性があるかどうか知っていますか?
  3. 私は (少なくとも Windows FTP では) 最も古いファイルが毎回応答ストリームの最後にリストされていることを確認しました。そして、ファイル名はすべての行の最後にあります。それを当たり前だと思ってコードを書くことはできますか?
  4. 最も古いファイルの詳細を取得するよりスマートな方法を提案できますか?
4

1 に答える 1

0

FTP サーバーが応答を送信する形式/パターンは、サーバーの作成/コーディング方法によって異なります。したがって、応答ストリームの形式は、ListDirectoryDetailsLinux/Windows サーバーごとに異なります。

そして、さまざまな情報源から、Linux FTP が ListDirectoryDetails.

したがって、1 つのパターンに依存したり、想定したりすることはできません。

これにはいくつかの解決策があります。

  1. 最初にListDirectoryコマンドを使用します。ディレクトリの内容 (ディレクトリ レコード) が表示されます。次に、すべてのコンテンツ/ディレクトリ レコードに対して、GetDateTimestampを使用します。すべてのファイルにタイム スタンプが表示されるので、最も古いファイルを判断できます。FtpWebRequestただし、Datetimestamp を知るためだけにすべてのファイルに対して発行する必要があるため、このソリューションは効率的ではありません。(「n」個のファイルがある場合、n+1 回の呼び出し。)

  2. もう 1 つの解決策は、ListDirectoryDe​​tailsのみを使用することです。これは、問題全体をプログラム的に解決するわけではありません。

    最も頻繁に使用される応答パターンとそれに対するコードを想定できます。この仮定は、ユーザー ガイドや構成ガイドなどのドキュメントに記載できます。確かに、ソリューションは Windows と Linux でそれぞれ 1 つのパターンに制限されますが、かなり許容できるはずです。(少なくとも私の場合は許容範囲でした)。可能性のあるすべてのパターンを処理しようとする巨大で不器用なコードを作成するのではなく、最も頻繁に遭遇するパターンに対してコーディングするのが合理的だと思います (パターンがもう 1 つあるかどうかわからない場合も同様です!)。

    正規表現を使用して応答パターンを一致させることができ、一致しない場合は、例外をスローするなどの適切なアクションを実行できます。もう 1 つの利点は、1 回の呼び出しで「n」個のファイルの日時スタンプを取得できることです (比較解決策#1に対して)。また、FTP サーバーを n+1 回呼び出すよりも、.NET コードで最も古い日時スタンプを決定する方が確実に高速です。

于 2012-07-31T08:21:47.520 に答える