FtpWebRequest Соединение с AS/400

Мне нужно загрузить несколько файлов по ftp со старого сервера AS/400. Мой код выглядит примерно так:

FtpWebRequest _request = (FtpWebRequest)WebRequest.Create("ftp://ftpaddress/FOO.CSV");
_request.Credentials = new NetworkCredential(_ftpUsername, _ftpPassword);
_request.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)_request.GetResponse();

Однако возникает исключение с сообщением:

501 Character (/) not allowed in object name.

Я предполагаю, что AS400 использует другой разделитель пути, чем /, но я не могу понять, как сформулировать uri таким образом, чтобы (1) FtpWebRequest принимал и (2) AS400 понимал.

Кто-нибудь еще сталкивался с этим?


person Dana    schedule 18.12.2009    source источник


Ответы (4)


Согласно на этой странице, косая черта является символом-разделителем пути:

Косая черта — это символ-разделитель для путей, отправляемых на FTP-сервер.

похожая беседа на форумах Microsoft (эпоха 2005 г.) указывает на ошибку в FtpWebRequest:

В настоящее время FtpWebRequest не поддерживает кавычки, и я не могу придумать, как вы сможете переопределить метод, не раскрывая наш код Мария Атанасова [NCL]MSFT, модератор, ноябрь 2005 г.

Попробуйте обновиться до самых последних версий или попробовать другую библиотеку; в ветке форума MS их несколько.

person J.J.    schedule 18.12.2009

Я часто получал это сообщение в прошлом, и это означало, что я забыл изменить формат имени.

При использовании FTP с AS400 возможны два формата имен, которые можно изменить с помощью FTP-команды NAMEFMT:

0 для системных файлов библиотеки (library\filename.member)

1 для файлов в IFS, где файл CSV будет

По умолчанию установлено значение 0.

Измените его на 1, и он должен работать. Однако я не уверен, как это можно изменить с помощью FtpWebRequest.

person Danny T.    schedule 21.12.2009
comment
Скорее всего проблема в этом. По умолчанию вы перемещаетесь по библиотекам и файлам. Переключение на namefmt 1 позволяет перемещаться по IFS, где, как я предполагаю, находится ваш CSV-файл. - person Mike Wills; 09.05.2011

Чтобы немного облегчить жизнь, FTP-сервер решает, какой формат имен вы хотите использовать, на основе вашей первой команды. Если вы начинаете с «cd /home», то FTP-сервер автоматически устанавливает для вас NAMEFMT в 1.

Действительно, вы можете изменить это вручную во время сеанса с помощью удаленной FTP-команды NAMEFMT. Пожалуйста, обратите внимание, что вам не нужен (старый) способ iSeries. Вы можете обратиться к КАЖДОМУ объекту iSeries с помощью NAMEFMT 1. Например, "get /QSYS.LIB/MYLIBRARY.LIB/MYFILE.FILE/MYMEMBER.MBR" подойдет для любой таблицы базы данных iSeries. Даже для многочленных файлов!

person robertnl    schedule 30.12.2009

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

ftp://[имя хоста]/%2F/[каталог ]/[подкаталог]/[имя файла].csv

«%2F» был обязательным и служит разделителем между именем хоста и путем.

person user942620    schedule 18.07.2017