1

我需要通过 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。

还有其他人碰到这个吗?

4

4 回答 4

2

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

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

0 用于库系统文件 (library\filename.member)

1 用于 IFS 中的文件,其中 CSV 文件将是

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

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

于 2009-12-21T17:06:31.233 回答
2

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

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

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

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

尝试更新到最新版本或尝试不同的库;MS论坛线程有几个。

于 2009-12-18T21:44:56.897 回答
0

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

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

于 2009-12-30T19:18:47.700 回答
0

这是先前提供的答案的汇总答案,但我能够通过使用以下结构来完成此工作:

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

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

于 2017-07-18T21:27:23.060 回答