我正在尝试使用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)
{
}
答案 0 :(得分:2)
你需要做的是让它与外部FTP客户端正确连接,我认为你已经完成了。一旦您正确连接另一个FTP客户端,您可以仔细检查所有凭据和设置是否匹配。完成此操作后仍然无法正常工作时,您应该使用类似Wireshark的内容分析外部FTP客户端和程序发送到服务器的内容,并查看请求标头中的差异。可能是您缺少一个简单的设置。
答案 1 :(得分:1)
不确定,但我不知道Peek()是检测是否有更多数据需要读取的理想选择。如果流不支持您正在尝试搜索,则Peek()可以返回-1。认为首选方法是在循环中使用ReadLine,直到它返回null ...
答案 2 :(得分:0)
检查您的文件位置是否完全 - 你有一个很长的文件名,所以三重检查是正确的。
确保您的FTP用户名/密码正确无误。如果是,请确保他们在FTP服务器上拥有正确的权限才能访问该文件。
确保您的FTP服务器在连接之前未达到最大连接数。
答案 3 :(得分:0)
使用单斜杠“/”在FTP服务器URL中双击“//”。
不要使用StreamReader。只需使用流编写器写入文件byte [] array。