我遇到一个烦人的问题,无法在FTP中获取所需的文件。该文件的名称可能有所不同,因此我需要先访问该文件夹并列出其中的文件,然后再直接向该文件发出请求。
我的问题是,例如,我可以在Filezilla中访问此文件,并且可以完美地发现该文件夹,但是当使用FtpWebResponse
实例获取该文件夹时,出现错误550
550文件不可用(例如,找不到文件,无法访问)
这是代码:
FtpWebRequest wr = (FtpWebRequest)WebRequest.Create("ftp://ftp.dachser.com/data/edi/kunden/da46168958/out");
wr.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
wr.Credentials = new NetworkCredential("login", "password");
FtpWebResponse response = (FtpWebResponse)wr.GetResponse();
Stream reponseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(reponseStream);
string names = reader.ReadToEnd();
FtpWebResponse响应=(FtpWebResponse)wr.GetResponse();
是抛出错误的行
PS:生产,测试和FileZilla位于同一域,使用相同的Internet连接(如果有帮助)
感谢您的关注和反馈
FileZilla日志:
我程序中的日志,用红色圈出的错误与FTP错误无关
答案 0 :(得分:2)
FtpWebRequest
解释URL时,它不会将将主机名和路径分隔的斜杠视为路径的一部分。然后将提取的路径按原样与FTP CWD
命令一起使用。这意味着FTP服务器将解析相对于您的主目录的路径。如果您的帐户没有被chroot(客户不将房屋视为根),则缺少前导斜线会导致意外行为。
在您的情况下,您从/remote/path
开始,并使用ftp://example.com/remote/path/
之类的URL,它将尝试更改为remote/path
,因此最终更改为/remote/path/remote/path
。那不是你想要的。
ftp://example.com//remote/path/
。还要注意,指向文件夹的URL应该以斜杠结尾:Why does FtpWebRequest return an empty stream for this existing directory?
有关其他550个问题,请参见FtpWebRequest returns error 550 File unavailable
答案 1 :(得分:0)
q)`sym`qty`price xcols lj/[a;reverse 1!'t]
sym qty price length
--------------------
a 1 1.1 100
b 2 2.2 200
c 3 3.3 300
这适用于我们的 Linux 和 Windows In 2021
机器从 ftp 服务器读取(在 Windows 和 Linux 上)
注意
TL;DR;
它有效:
live
它不起作用:
ftp://ftp.yourdomain.com.br/public_html/
ftp://ftp.yourdomain.com.br//public_html/
ftp://ftp.yourdomain.com.br/web/
ftp://ftp.yourdomain.com.br//web/
用法: //验证目录public_html是否存在
ftp://ftp.yourdomain.com.br/public_html
ftp://ftp.yourdomain.com.br//public_html
ftp://ftp.yourdomain.com.br/web
ftp://ftp.yourdomain.com.br//web
var url = "/public_html/";
var result = FtpUtil.DoesDirectoryExists(url, "ftp://ftp.yourdomain.com.br", "ftp user here", "ftp password here");