使用C#从FTP服务器读取CSV文件

时间:2012-09-25 13:22:54

标签: c# asp.net ftpwebrequest

我正在尝试使用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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

  1. 检查您的文件位置是否完全 - 你有一个很长的文件名,所以三重检查是正确的。

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

  3. 确保您的FTP服务器在连接之前未达到最大连接数。

答案 3 :(得分:0)

使用单斜杠“/”在FTP服务器URL中双击“//”。

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