2016-04-11 32 views
2

CsvHelper kullanıyorum. Burada bir csv dosyasını ftp'den indirmeye ve bir sınıfa yazmaya çalışıyorum. Bir hata atıyor - Atılan bir nesneye erişilemiyor. Nesne adı: System.Net.Sockets.NetworkStream. satırdan - IEnumerable records = csv.GetRecords() ToList();Atılan bir nesneye erişilemiyor. Nesne adı: System.Net.Sockets.NetworkStream

Herhangi bir fikrin var mı? Bu sorunu gidermek için

  request.Credentials = new NetworkCredential(ftpUser, ftpPwd); 
      request.Method = WebRequestMethods.Ftp.DownloadFile; 
      request.UseBinary = true; 

      // Csv file 
      using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
      { 
       using (Stream responseStream = response.GetResponseStream()) 
       { 
        if (responseStream != null) 
        { 
         using (TextReader tr = new StreamReader(responseStream)) 
         { 
          using (CsvReader csv = new CsvReader(tr)) 
          { 
           if (csvUpload.IncludeInvoice) csv.Configuration.RegisterClassMap<PacketUploadInvoiceMasterMap>(); 
           else csv.Configuration.RegisterClassMap<PacketUploadBasicMasterMap>(); 

           IEnumerable<PacketUploadMaster> records = csv.GetRecords<PacketUploadMaster>().ToList(); 

           pumResults = records.ToList(); 
          } 
         } 
        } 
       } 

       response.Close(); 
      } 
+0

Yakından aramamalı ve tek kullanımlık olarak kullanmamalısınız. –

+0

ayrıntılı olabilir, hangi kütüphane (CsvReader) kullanıyorsunuz? –

+0

ile sorunu çözmez –

cevap

0

, bunu kapatıp responseStream hem imha edecek responseStream uçlarının kullanırken aşağıda

using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
using (Stream responseStream = response.GetResponseStream()) 
{ 
    if (responseStream != null) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      responseStream.CopyTo(ms); 
      streamInByte = ms.ToArray(); 
     } 
    } 
} 

using (TextReader tr = new StreamReader(new MemoryStream(streamInByte), Encoding.Default)) 
{ 
    using (CsvReader csv = new CsvReader(tr)) 
    { 
     // The value used to escape fields that contain a delimiter, quote, or line ending. 
     // csv.Configuration.Quote = '"'; 
     if (csvUpload.IncludeInvoice) csv.Configuration.RegisterClassMap<PacketUploadInvoiceMasterMap>(); 
     else csv.Configuration.RegisterClassMap<PacketUploadBasicMasterMap>(); 

     // Remove white space from header 
     csv.Configuration.TrimHeaders = true; 

     IEnumerable<PacketUploadMaster> records = csv.GetRecords<PacketUploadMaster>().ToList(); 

     pumResults = records.ToList(); 
    } 
} 
1

gibi ayrı ayrı csv Dosya okuma yazma yapmak zorunda ve Alttaki akışınız FtpWebResponse response. Bu nedenle, response.Close() numaralı telefonun aranması Cannot access a disposed object'u atar.