Ich erzeuge einen Dateistream und wickle ihn in einen gepufferten Stream-Reader ein. Ich nehme dann den Strom eine Zeile zu einer Zeit mit Lesezeile. Nach X Anzahl von Zeilen/Bytes habe ich die Stapelüberlauf-Ausnahme getroffen. Es scheint kein Problem beim rekursiven Aufrufen einer Methode zu sein, da kleinere Dateien ohne Probleme verarbeitet werden. Ich hoffe, ich habe hier einfach etwas Einfaches übersehen. Es gibt zu viel Logik die gesamte Schnipsel hier posten, aber das ist der Kern ...StreamReader system.stackoverlow Ausnahme
Instantiates a static stream reader //
{
using (FileStream fs = File.Open(filename, FileMode.Open, FileAccess.Read,
FileShare.Read))
using (BufferedStream bs = new BufferedStream(fs))
using (reader = new StreamReader(bs))
InitializeRecord(reader) // passes reader in
}
InitializeRecord(StreamReader reader)
{
//Makes some determinations whether to take in the first line or skip to first header record... This is working fine. Initializes first line = reader.ReadLine()
// Calls the first method to generate the header output which in turns calls the LineReader Method to consume the next line.
}
LineReader()
{ // Main loop for iterating over lines where stackoverflow occurs
while (!reader.EndOfStream)
{
string prev_line = line;
line = reader.ReadLine(); // StackOverFlow occurs here only on larger files/# of bytes read
VerifyLine(line,prev_line);
}
}
VerifyLine(string line)
{
// Does some checking on the line and calls output methods for each record type which in turn calls LineReader which LineReader exits when the endofstream is reached.
//But is blowing up prior to reaching the end of the stream. By writing the lines out to disk as it iterates it writes a replica of the stream perfectly until the stack overflow occurs.
//This is only the difference of anything greater than a 5 MB file. Some of these records are hitting 9 million characters. I tried increasing the buffer size without luck.
}
Sie haben uns nicht die Zeilen angegeben, die das Problem verursacht haben. Irgendwo in 'InitializeRecord',' LineReader' oder 'VerifyLine' existiert Ihr Problem. – user7116
Ich bearbeitet für LineReader-Methode, wo die Ausnahme ausgelöst wird. –
Was ist mit "VerifyLine"? –