Nicht Lesen kann, von einem geschlossenen TextReader
Habe ich ein system, dass die Prozesse einige große CSV-Dateien.
Hat sich die Situation nun entstanden ist, wo könnten diese Dateien haben eine Anzahl von keiner getrennt, wertlos Linien vor dem eigentlichen Komma-getrennte Inhalte.
Ich den Ansatz genommen haben, ist das erstellen einer temporären Leser zu prüfen, die Anzahl der überflüssigen Linien und bewegen Sie dann die arbeiten TextReader auf, dass die Anzahl der Zeilen zur Verarbeitung bereit.
Mein code ist wie folgt:
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;
}
Jedoch die reader.ReadLine();
in diesem Teil des Codes:
for (int i = superfluousLineCount; i > 0; i--)
{
reader.ReadLine();
}
...wirft die folgende Ausnahme
Nicht Lesen kann, von einem geschlossenen TextReader.
ObjectDisposedException in mscorlib
Methode:
Void ReaderClosed()Stack-Trace:
System.IO.__Fehler.ReaderClosed()
System.IO.StreamReader.ReadLine()
bei CsvReader.PrepareReader(TextReader reader) CsvReader.cs:Zeile 93
Jede Beratung sehr geschätzt. Auch, ist der beste Weg zu gehen über meine Herausforderung?
Hinweise: Framework 2.0
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit
using (tmpReader)
es wird in der NähetmpReader
(Die Referenzen auf das gleiche Objekt wiereader
tut), so dass, wenn Sie versuchen zu Lesenreader
in der Schleife, es ist geschlossen.Ihre beste Wette ist, um die beiden zu verbinden-loops. Sine Sie nur wollen, überspringen Zeilen, ich würde denken, der Logik der ersten Schleife ist ausreichend.
TextReader tmpReader = reader;
ist völlig bedeutungslos.Ich denke, Sie haben einfach, dies zu tun (normalize/korrigieren, ich habe einige Vereinfachungen ohne kompilieren oder testen):
IOW verwenden Sie die input-Bezug, und bewegen den Leser, wo Sie wollen.
Sich bewusst sein, schließen Sie Ihre Leser außerhalb dieser Methode