微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当使用ListDirectoryDe​​tails作为目录时,FtpWebRequest返回“ 550文件不可用例如,文件未找到,无法访问”

如何解决当使用ListDirectoryDe​​tails作为目录时,FtpWebRequest返回“ 550文件不可用例如,文件未找到,无法访问”

我遇到一个烦人的问题,无法在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错误无关

解决方法

FtpWebRequest解释URL时,它不会将将主机名和路径分隔的斜杠视为路径的一部分。然后将提取的路径按原样与FTP CWD命令一起使用。这意味着FTP服务器将解析相对于您的主目录的路径。如果您的帐户没有被chroot(客户不将房屋视为根),则缺少前导斜线会导致意外行为。

在您的情况下,您从/remote/path开始,并使用ftp://example.com/remote/path/之类的URL,它将尝试更改为remote/path,因此最终更改为/remote/path/remote/path。那不是你想要的。

  • 您必须使用相对路径到主文件夹。在您的情况下,意味着使用没有任何路径的URL。
  • 或者使用绝对路径,您需要在主机名之后使用两个斜杠:ftp://example.com//remote/path/

还要注意,指向文件夹的URL应该以斜杠结尾:Why does FtpWebRequest return an empty stream for this existing directory?

有关其他550个问题,请参见FtpWebRequest returns error 550 File unavailable

,

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 上)

注意

  • Windows ftp 上的主文件夹是 web
  • Linux ftp 上的主文件夹是 public_html

TL;DR;

  • 底线:URL 需要以 /
  • 结尾

它有效:

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");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。