Эффективное чтение файла CSV с обработкой ошибок - C#

Узнай цену своей работы

Формулировка задачи:

Цель - прочитать данные из CSV-файла с дальнейшей обработкой полученных данных. Начал с использования StreamReader, не понравилось тем, что ловил ошибку периодически (уже не помню какую). Перешёл к использованию File.ReadAllLines - стал ловить другую ошибку, опять же, периодически. Не в отладчике, а уже при использовании приложения винда выдаёт такой текст при ошибке:
Подробная информация об использовании оперативной (JIT) отладки вместо данного диалогового окна содержится в конце этого сообщения. ************** Текст исключения ************** System.IO.IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. ---> System.Net.Sockets.SocketException: Удаленный хост принудительно разорвал существующее подключение в System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) --- Конец трассировки внутреннего стека исключений --- в System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size) в System.IO.StreamReader.ReadBuffer() в System.IO.StreamReader.ReadToEnd() ...
Не понимаю, дело в том, что не хватает оперативки или в чём-то другом? И вопрос, как всё же наиболее рационально читать большие CSV-шные файлы?

Решение задачи: «Эффективное чтение файла CSV с обработкой ошибок»

textual
Листинг программы
  1.    public static Boolean GetFromPostMethod(string Url, string Data)
  2.         {
  3.             PostQueryAnswer = string.Empty;
  4.             PostQueryErr = string.Empty;
  5.             var response = POST_Query(Url, Data);
  6.  
  7.             if (response != null)
  8.                 {
  9.                     var strreader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  10.                     PostQueryAnswer = strreader.ReadToEnd();
  11.                     return true;
  12.                 }
  13.             else
  14.                 // что-то пошло не так, НЕУДАЧНЫЙ пост-запрос вернул ответ
  15.                 // Возвращая FALSE - мы говорим ПОВТОРИТЬ ЗАПРОС
  16.                 // TRUE - соглашаемся с тем, что запрос прошёл успешно
  17.                 {
  18.                     switch (PostQueryErr)
  19.                     {
  20.                         case "Время ожидания операции истекло":
  21.                             PostQueryErr = string.Empty;
  22.                             return false;                        
  23.                         case "Базовое соединение закрыто: Соединение, которое должно было работать, было разорвано сервером.":
  24.                             goto case "Время ожидания операции истекло";
  25.                         case "Запрос был прерван: Время ожидания операции истекло.":
  26.                             goto case "Время ожидания операции истекло";
  27.                            
  28.                             // получили некую информацию, почему не прокатил запрос
  29.                         default:
  30.                             return true;
  31.                     }
  32.                 }        
  33.         }
  34.  
  35.    public static HttpWebResponse POST_Query(string Url, string Data)
  36.         {
  37.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
  38.             request.Method = "POST";
  39.             request.Proxy = null;
  40.             request.Timeout = 2500;
  41.             request.Credentials = CredentialCache.DefaultCredentials;
  42.  
  43.             UTF8Encoding encoding = new UTF8Encoding();
  44.             var bytes = encoding.GetBytes(Data);
  45.  
  46.             request.ContentType = "application/x-www-form-urlencoded";
  47.             request.ContentLength = bytes.Length;
  48.  
  49.             try
  50.             {
  51.                 using (var newStream = request.GetRequestStream())
  52.                 {
  53.                     newStream.Write(bytes, 0, bytes.Length);
  54.                     newStream.Close();
  55.                 }
  56.                 try
  57.                 {
  58.                     return (HttpWebResponse)request.GetResponse();
  59.                 }
  60.                 catch (WebException wex)
  61.                 {
  62.                     if (wex.Response == null)
  63.                     {
  64.                         PostQueryErr = wex.Message;
  65.                     }
  66.                     else
  67.                     {
  68.                         // Ответ от сервера в случае неудачного пост-запроса
  69.                         try
  70.                         {
  71.                             var resp = new StreamReader(wex.Response.GetResponseStream()).ReadToEnd();
  72.                             XmlDocument doc = new XmlDocument();
  73.                             doc.LoadXml(resp);
  74.                             XmlNodeList tegN = doc.GetElementsByTagName("body");
  75.                             PostQueryErr = tegN[0].InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "");
  76.                         }
  77.                         catch
  78.                         {
  79.                             PostQueryErr = wex.Message;
  80.                         }
  81.                     }
  82.                     return null;
  83.                 }
  84.             }
  85.             catch (Exception ex)
  86.             {
  87.                 string xxx = ex.Message;
  88.                 return null;
  89.             }
  90.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут