2012-08-30 31 views
1

使用下面的程序我試圖將列在FTP服務器上的文件夾中的所有文件名插入到SQL表中。FtpWebRequest嘗試將所有文​​件名插入到sql表中?

在寫入表,我得到一個錯誤

C#不能訪問一個釋放的對象。對象名稱 'system.net.sockets.networkstream'

reader.ReadToEnd()寫作,我想一個一個文件名的全碼流播放。

namespace Examples.System.Net 
{ 
    public class WebRequestGetExample 
    { 
     public static void Main() 
     { 

      FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://myftpaddress.com/0708/"); 
      request.Method = WebRequestMethods.Ftp.ListDirectory; 


      request.Credentials = new NetworkCredential("vish10", "MyPasswd"); 

      FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

      Stream responseStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(responseStream); 
      Console.WriteLine(reader.ReadToEnd()); 

      SqlConnection sqlConnection1 = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DMSTG;Data Source=."); 
      SqlCommand cmd = new SqlCommand(); 

      cmd.CommandText = @"Insert into FTPfileList0708Folder 
              values('" + reader.ReadToEnd().ToString() + "')"; 
      cmd.Connection = sqlConnection1; 

      sqlConnection1.Open(); 

      cmd.ExecuteNonQuery(); 
      sqlConnection1.Close(); 

      Console.WriteLine("Directory List Complete, status {0}", response.StatusDescription); 

      reader.Close(); 
      response.Close(); 
     } 
    } 
} 

回答

1

你已經閱讀過完整的響應這裏:

FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

Stream responseStream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(responseStream); 
Console.WriteLine(reader.ReadToEnd()); 

一旦你讀它,你不能讀一遍。

只是改變

string text = reader.ReadToEnd(); 

...然後添加適當的語句using妥善處理資源:

string text; 
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
{ 
    using (Stream responseStream = response.GetResponseStream()) 
    { 
     // No need to dispose of the StreamReader as we're already 
     // disposing of the stream. It wouldn't do any harm though. 
     // Is the text definitely encoded in UTF-8 though? 
     text = new StreamReader(responseStream).ReadToEnd(); 
    } 
} 

你應該有你所有的SQL相關資源的類似using聲明。 解決了眼前的問題 - 但不清楚與讀取文件名的具體業務有什麼關係。這將取決於文本中文件名的格式。從我所記得的情況來看,FTP在這類事情上其實很不明確。

我會推薦兩個顯著的​​變化:

  • 了分割你的代碼邏輯方法:
    • 處理FTP請求本身
    • 數據解析成合適的格式
    • 插入數據到數據庫
  • 試圖找到一個更高級別的FTP庫這將知道如何爲你解析