Команда OPTS в FtpWebRequest / FtpWebResponse - PullRequest
3 голосов
/ 10 октября 2009

Я использую объекты FtpWebRequest и FtpWebResponse в пространстве имен System.Net для выдачи команды LIST. У меня проблема в том, что на FTP-сервере, к которому я подключаюсь, не реализована команда OPTS.

Есть ли способ запретить FtpWebRequest от выдачи команды OPTS?

Ответы [ 3 ]

4 голосов
/ 12 октября 2009

Боюсь, вы не можете сделать это ... Согласно Reflector, он, кажется, жестко запрограммирован во внутреннем методе класса (FtpControlStream.BuildCommandsList), поэтому вы не можете его переопределить. Однако это не должно быть проблемой, запрос должен продолжаться даже в случае сбоя команды OPTS (см. Код для FtpControlStream.PipelineInstruction в Reflector)

2 голосов
/ 30 июля 2012

Это не самый элегантный обходной путь, но вы можете изменить команды, которые FtpWebRequest отправляет:

  1. Использовать асинхронные методы (Begin / End)
  2. Введите свой WriteCallbackDelegate в базовый FtpWebRequest CommandStream.
  3. Измените список CommandStream Commands в своем введенном элегантном
  4. Передать управление обратно делегату обратного вызова по умолчанию

Я написал несколько черновиков о том, как это сделать, но не стесняйтесь комментировать там / здесь или напишите мне, если кто-нибудь увидит это и нуждается в более подробной информации.

2 голосов
/ 05 января 2010

На самом деле, это проблема, потому что имена файлов могут быть закодированы неправильно ... Некоторые ftp-серверы не поддерживают OPTS UTF8, но все же передают имена файлов в UTF8. (Обратите внимание, что «Стандарт OPTs UTF8» НЕ требуется стандартом интернационализации FTP, хотя поддержка имен файлов UTF8 есть.) Классы .NET Ftp будут использовать кодовую страницу по умолчанию, если они не получат ответ OK на OPTS UTF8 ... К сожалению, MS так или иначе не предоставил какой-либо способ использования UTF8, поскольку это не позволяет вам передавать международные имена файлов на серверы, совместимые с UTF8, и с них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...