FtpWebRequest连接到AS / 400

时间:2009-12-18 21:27:19

标签: c# ibm-midrange ftpwebrequest

我需要从旧的AS / 400服务器通过ftp下载一些文件。我的代码看起来或多或少像:

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理解。

其他人碰到了这个?

4 个答案:

答案 0 :(得分:2)

根据this page,fwd斜杠路径分隔符:

  

正斜杠是发送到FTP服务器的路径的分隔符。

微软论坛(2005年代)的similar conversation表示它是FtpWebRequest中的一个错误:

  

目前FtpWebRequest不支持引用,我想不出一种方法可以在不暴露我们的代码的情况下覆盖该方法 Mariya Atanasova [NCL] MSFT,主持人,2005年11月

尝试更新到最新版本或尝试使用其他库; MS论坛帖子有几个。

答案 1 :(得分:2)

我过去经常收到此消息,这意味着我忘记更改名称格式。

使用AS400进行FTP时,有两种名称格式,可以使用FTP命令NAMEFMT进行更改:

0表示库系统文件(library \ filename.member)

1表示IFS中的文件,其中CSV文件为

默认情况下,它设置为0.

将其更改为1,它应该可以正常工作。但是我不确定如何使用FtpWebRequest更改它。

答案 2 :(得分:0)

为了让生活更轻松,FTP服务器根据您的第一个命令决定您要使用的NameFormat。如果以“cd / home”开头,则FTP服务器会自动将NAMEFMT设置为1。

实际上,您可以在使用远程FTP命令NAMEFMT进行会话期间手动更改此设置。请注意,您不需要(旧)iSeries方式。您可以使用NAMEFMT 1在iSeries上寻址每个对象。例如,“get /QSYS.LIB/MYLIBRARY.LIB/MYFILE.FILE/MYMEMBER.MBR”将为任何iSeries数据库表执行此操作。即使对于多成员文件!

答案 3 :(得分:0)

这是以前提供的答案的总体答案,但我能够通过使用以下结构来实现这一点:

ftp://[HostName]/%2F/[directory]/[subdirectory]/[filename].csv

'%2F'是必需的,用作主机名和路径之间的分隔符。