我需要从旧的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理解。
其他人碰到了这个?
答案 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'是必需的,用作主机名和路径之间的分隔符。