У меня есть система, обрабатывающая некоторые большие CSV-файлы.Не удается прочитать из закрытого TextReader
Теперь возник сценарий, в котором у этих файлов может быть несколько ничетуемых, бесполезных строк, предшествующих фактическому содержимому с разделителями-запятыми.
Подход, который я принял, заключается в создании временного считывателя для определения количества лишних строк, а затем перемещения рабочего TextReader на это количество строк, готовых к обработке.
Мой код выглядит следующим образом:
private static TextReader PrepareReader(TextReader reader)
{
// Variables
TextReader tmpReader = reader;
Int32 superfluousLineCount = 0;
// Determine how many useless lines we have
using (tmpReader)
{
string line;
string headerIdentifier = "&1,";
while ((line = tmpReader.ReadLine()) != null)
{
// Check if the line starts with the header row identifier
if (line.Substring(0, 3) != headerIdentifier)
{
// Increment the superfluous line counter
superfluousLineCount++;
}
else
{
break;
}
}
}
// Move the source reader through how many lines we want to ignore
using (reader)
{
for (int i = superfluousLineCount; i > 0; i--)
{
reader.ReadLine();
}
}
// Return
return reader;
}
Однако reader.ReadLine();
в этой части кода:
for (int i = superfluousLineCount; i > 0; i--)
{
reader.ReadLine();
}
... бросает следующее исключение
Не удается прочитать из закрытого TextReader. ObjectDisposedException в mscorlib Метод: Пустота ReaderClosed()
Трассировка стека: на System.IO .__ Error.ReaderClosed() на System.IO.StreamReader.ReadLine() на CsvReader.PrepareReader (ЧтениеТекста считыватель) в CsvReader.cs: строка 93
Любые советы, которые очень ценят. Кроме того, это лучший способ решить мою задачу?
Примечания: Рама 2.0
Спасибо.
Right. Эта строка 'TextReader tmpReader = reader'' совершенно бессмысленна. –
Спасибо, что имеет прекрасный смысл, теперь это было указано. Есть ли способ * скопировать * TextReader без повторного опроса файла? – Ste
Отправлено [this SO thread] (http://stackoverflow.com/questions/831417/how-do-you-reset-ac-sharp-net-textreader-cursor-back-to-the-start-point) для что вы могли бы попробовать – Attila