-1

我正在尝试使用 c# 从 ftp 服务器读取 CSV 文件,但问题是它不允许我读取并抛出此错误

远程服务器返回错误:(530) 未登录。

我花了很多时间研究这个问题,不幸的是我还没有找到解决方案。任何帮助将不胜感激。

这是代码:

StringBuilder result = new StringBuilder();
FtpWebRequest reqFTP;
try
{
    String ftpserver = "ftp://domain.com/StatusChanges_20120922_043057.csv";

    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpserver));
    reqFTP.UsePassive = false;
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential("test@domain.com", "password");
    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
    reqFTP.Proxy = GlobalProxySelection.GetEmptyWebProxy();
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

    StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
    string line = "";

    while (reader.Peek() > -1)
    {
        line = reader.ReadLine();
        Console.WriteLine(line);//**********HTML was wrote out here*************
    }

    if (result.ToString().LastIndexOf('\n') >= 0)
        result.Remove(result.ToString().LastIndexOf('\n'), 1);
    reader.Close();
    response.Close();

    return result.ToString();
}
catch (Exception ex)
{
}
4

4 回答 4

2

您需要做的是让它与外部 FTP 客户端正确连接,我假设您已经这样做了。一旦您有另一个 FTP 客户端正确连接,您可以仔细检查所有凭据和设置是否匹配。完成此操作后,它仍然无法正常工作,您应该分析外部 FTP 客户端和您的程序使用Wireshark之类的东西发送到服务器的内容,并查看请求标头的差异。可能是您缺少一个简单的设置。

于 2012-09-25T13:29:13.920 回答
1

不确定,但我不知道 Peek() 是检测是否有更多数据要读取的理想选择。如果您在此处尝试的流不支持搜索,则 Peek() 可以返回 -1。认为首选的方法是在循环中使用 ReadLine 直到它返回 null ...

于 2012-09-25T13:30:32.037 回答
0
  1. 检查您的文件位置是否完全正确 - 您的文件名很长,因此请三重检查它是否正确。

  2. 确保您的 FTP 用户名/密码正确。如果是,请确保他们在 FTP 服务器上具有正确的权限才能访问该文件。

  3. 在连接到它之前,请确保您的 FTP 服务器没有达到最大连接数。

于 2012-09-25T13:31:41.487 回答
0

将 FTP 服务器 URL 中的单斜杠“/”改为双斜杠“//”。

不要使用 StreamReader。只需使用流编写器写入文件 byte[] 数组。

于 2013-06-21T16:19:02.127 回答