4

System.Net 名前空間の FtpWebRequest オブジェクトと FtpWebResponse オブジェクトを使用して LIST コマンドを発行しています。私が抱えている問題は、接続している FTP サーバーに OPTS コマンドが実装されていないことです。

FtpWebRequest が OPTS コマンドを発行するのを防ぐ方法はありますか?

4

3 に答える 3

5

恐れ入りますが...Reflectorによると、内部クラスメソッド(FtpControlStream.BuildCommandsList)にハードコーディングされているようですので、オーバーライドすることはできません。ただし、問題になることはなく、OPTSコマンドが失敗してもリクエストは続行されます(FtpControlStream.PipelineInstructionReflectorのコードを参照)

于 2009-10-11T21:48:08.050 に答える
3

これは最も洗練された回避策ではありませんが、FtpWebRequest送信するコマンドを次の方法で変更できます。

  1. 非同期メソッドを使用する(開始/終了)
  2. WriteCallbackDelegate基礎となるに独自のものを注入しますFtpWebRequest CommandStream
  3. 注入された要素CommandStreamののリストを変更しますCommands
  4. 制御をデフォルトのコールバックデリゲートに戻します

これを行う方法についてドラフトの詳細をいくつか書きましたが、ここ/ここにコメントするか、誰かがこれを見て詳細が必要な場合は私にメールしてください。

于 2012-07-30T13:50:53.897 に答える
3

実際には、ファイル名が正しくエンコードされていない可能性があるため、これは問題です... 一部の ftp サーバーは OPTS UTF8 をサポートしていませんが、それでもファイル名を UTF8 で送信します。(「OPTs UTF8」は FTP 国際化標準では必須ではありませんが、UTF8 ファイル名のサポートは必須であることに注意してください。) .NET Ftp クラスは、OPTS UTF8 に対して OK 応答を取得しない場合、既定のコード ページを使用します...とにかく、MS が UTF8 を使用する何らかの方法を提供しなかったのは残念です。これにより、UTF8 準拠のサーバーとの間で国際ファイル名を送受信できなくなるためです。

于 2010-01-05T01:03:45.617 に答える