2012-09-25 126 views
-1

我試圖使用C#,但讀取從FTP服務器CSV文件的問題是它不允許我閱讀並引發此錯誤
閱讀從FTP服務器一個CSV文件中使用C#

The remote server returned an error: (530) Not logged in.

我花了很多時間研究這個問題不幸的是我還找不到解決方案。任何幫助將不勝感激。

下面是代碼:

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("[email protected]", "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) 
{ 
} 

回答

2

你需要做的是把它與外部FTP客戶端,例如,我假設你已經做正確連接。一旦你有另一個FTP客戶端正確連接,你可以仔細檢查所有的憑證和設置是否匹配。一旦你完成了這個工作,但它仍然無法工作,你應該分析一下外部FTP客戶端和你的程序使用類似Wireshark的方式發送到服務器,並查看請求標題中的區別。這可能是因爲你錯過了一個簡單的設置。

1

不確定,但我不知道Peek()是檢測是否有更多數據需要讀取的理想選擇。如果流在您嘗試訪問時不支持查找,則Peek()可以返回-1。想想首選的方法是使用輸入行的循環,直到它返回null ...

0
  1. 檢查,如果你的文件的位置是正是正確的 - 你已經有了一個長文件名存在,所以三重檢查它的正確。

  2. 確保您的FTP用戶名/密碼正確無誤。如果是,請確保它們在FTP服務器上具有正確的權限才能訪問該文件。

  3. 確保您的FTP服務器在連接到它之前未達到最大連接數。

0

讓FTP服務器URL單斜槓 「/」,以雙斜線 「//」。

不使用StreamReader。只需使用流寫入器來寫入文件byte []數組。

相關問題