我需要通过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使用了与/不同的路径分隔符,但我不知道如何以(1) FtpWebRequest接受和(2) AS400理解的方式表达uri。
还有别的人撞到这个吗?
发布于 2009-12-19 05:44:57
根据this page,fwd斜杠是路径分隔符:
FTP正斜杠是发送到
服务器的路径的分隔符。
微软论坛上的一个similar conversation (2005年)表明这是FtpWebRequest中的一个bug:
目前FtpWebRequest不支持报价,我想不出有什么方法可以覆盖该方法而不公开我们的代码Mariya Atanasova NCLMSFT,版主,2005年11月
尝试更新到最新版本或尝试不同的库;MS论坛线程有几个。
发布于 2009-12-22 01:06:31
我过去经常收到这样的消息,这意味着我忘记了更改名称格式。
当使用AS400进行FTP时,可能有两种名称格式,可以使用FTP命令NAMEFMT进行更改:
0表示库系统文件(library\filename.member)
1表示IFS中的文件,其中CSV文件
默认情况下,它设置为0。
将其更改为1,它应该可以工作。然而,我不确定如何使用FtpWebRequest来更改它。
发布于 2009-12-31 03:18:48
为了让你的工作更简单一点,FTP服务器会根据你的第一条命令来决定你要使用什么NameFormat。如果您以"cd /home“开始,那么FTP服务器会自动将NAMEFMT设置为1。
实际上,您可以在会话期间使用远程FTP命令NAMEFMT手动更改此设置。请注意,您不需要(旧的) iSeries方法。您可以使用NAMEFMT1对iSeries上的每个对象进行寻址。例如,"get /QSYS.LIB/MYLIBRARY.LIB/MYFILE.FILE/MYMEMBER.MBR“将对任何iSeries数据库表执行此操作。即使对于多成员文件也是如此!
https://stackoverflow.com/questions/1930787
复制相似问题