System.Net 名前空間の FtpWebRequest オブジェクトと FtpWebResponse オブジェクトを使用して LIST コマンドを発行しています。私が抱えている問題は、接続している FTP サーバーに OPTS コマンドが実装されていないことです。
FtpWebRequest が OPTS コマンドを発行するのを防ぐ方法はありますか?
System.Net 名前空間の FtpWebRequest オブジェクトと FtpWebResponse オブジェクトを使用して LIST コマンドを発行しています。私が抱えている問題は、接続している FTP サーバーに OPTS コマンドが実装されていないことです。
FtpWebRequest が OPTS コマンドを発行するのを防ぐ方法はありますか?
恐れ入りますが...Reflectorによると、内部クラスメソッド(FtpControlStream.BuildCommandsList
)にハードコーディングされているようですので、オーバーライドすることはできません。ただし、問題になることはなく、OPTSコマンドが失敗してもリクエストは続行されます(FtpControlStream.PipelineInstruction
Reflectorのコードを参照)
これは最も洗練された回避策ではありませんが、FtpWebRequest
送信するコマンドを次の方法で変更できます。
WriteCallbackDelegate
基礎となるに独自のものを注入しますFtpWebRequest
CommandStream
。CommandStream
ののリストを変更しますCommands
これを行う方法についてドラフトの詳細をいくつか書きましたが、ここ/ここにコメントするか、誰かがこれを見て詳細が必要な場合は私にメールしてください。
実際には、ファイル名が正しくエンコードされていない可能性があるため、これは問題です... 一部の ftp サーバーは OPTS UTF8 をサポートしていませんが、それでもファイル名を UTF8 で送信します。(「OPTs UTF8」は FTP 国際化標準では必須ではありませんが、UTF8 ファイル名のサポートは必須であることに注意してください。) .NET Ftp クラスは、OPTS UTF8 に対して OK 応答を取得しない場合、既定のコード ページを使用します...とにかく、MS が UTF8 を使用する何らかの方法を提供しなかったのは残念です。これにより、UTF8 準拠のサーバーとの間で国際ファイル名を送受信できなくなるためです。