FtpWebRequest连接到AS / 400

我需要从旧的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(); 

但是,消息抛出exception:

 501 Character (/) not allowed in object name. 

我猜测AS400使用的路径分隔符不同于/但我无法弄清楚如何用某种方式表达uri(1)FtpWebRequest接受和(2)AS400理解。

其他人碰到了这个?

根据这个页面 ,fwd斜杠路径分隔符:

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

微软论坛(2005年)的类似对话表明它是FtpWebRequest中的一个错误:

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

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

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

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

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

1表示IFS中的文件,其中包含CSV文件

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

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

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

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

当我尝试将文件上传到AS400时,我仍然遇到同样的问题,但此页面对您有所帮助:

http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/b4b2e05c-625b-466b-9a11-6173f17187b4/

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

的ftp:// [主机名] /%2F / [目录] / [子目录] / [文件名]的.csv

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