Я пишу метод, который подключается к FTP, читает файл csv в поток, а затем использует TextFieldParser для обработки данных.Поток удаляется до того, как EndOfData является истинным
Это все работает, за исключением проблемы, которую я получаю, когда это происходит примерно на полпути через чтение CSV, и вдруг я получаю исключение ObjectDisposedException. Я пробовал передавать StreamReader & TextReader в TextFieldParser, но оба они приводят к той же проблеме.
Должен ли я загружать CSV во временный локальный каталог, а затем читать это или нет проблемы с чтением файла с FTP? Я полагал, что может быть какая-то настройка сервера, возможно, отключает поток, прежде чем он прочитает весь файл.
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("REMOVED.csv");
request.Credentials = new NetworkCredential("xyz", "*******");
using (WebResponse response = request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
using (TextReader reader = new StreamReader(stream))
{
using (TextFieldParser parser = new TextFieldParser(reader))
{
parser.HasFieldsEnclosedInQuotes = true;
parser.Delimiters = new string[] { "," };
while (!parser.EndOfData) //exception is thrown here about 1500lines into csv
{
Console.WriteLine(parser.ReadLine().ToString());
}
}
}
}
}
ПОСЛЕДНЯЯ ЛИНИЯ ВЫХОДА ДО ИСКЛЮЧЕНИЯ Метательное
190500, Курьерская доставка, Перевозка грузов, Дистрибьютор, 1,5,15/12/2014 16:44
Если я должен сначала загрузите файл, просто я использую WebClient.DownloadFile() ?? Как я могу узнать, когда файл завершил загрузку, а затем прочитал его?
EDIT:
Система чистая калька выход показывает следующее
System.Net.Sockets Verbose: 0: [10412] Выход Разъем # 24914721 :: Receive() -> Int32 # 95 Информация о System.Net: 0: [10412] FtpControlStream # 15315213 - Получен ответ [226-Файл успешно передан 226 5.748 секунд (измеряется здесь), 30,91 Кбайт в секунду] Информация о System.Net: 0: [10412] FtpWebRequest # 16868352: :(Освобождение FTP-соединения # 15315213.)
ДАЛЕЕ EDIT
Выход из System.Net Трассировка показывает последнюю строку CSV принимаемой, так почему анализатор располагаетс до его завершения ?? Я по-прежнему совершенно не разбираюсь в программировании, поэтому я не уверен, как это сделать.
Вы пробовали чтение строкового массива вместо TextFieldParser? Также откуда происходит выброс исключения? [Это из парсера? ] –
'WebClient.DownloadFile()' является синхронным, вы можете прочитать файл сразу после завершения вызова.Оригинальная проблема выглядит странно для меня: вы уверены, что это не в коде, который вы удалили? – Zruty
Я прокомментировал весь код, который был удален, выровняем одну строку - Console.WriteLine (parser.ReadLine(). ToString()); который я прочитал. строки csv, которые он терпит неудачу, я добавил как «выход» в исходное сообщение. @KCdod исключение выбрано в while (! Parser.EndOfData) –