我试图使用代码(粘贴在下面)读取文本文件,但文件的最后一行不会被读取.我的逻辑是否正确?
using (StreamReader reader = new StreamReader(stream)) { try { string line = reader.ReadLine(); string[] data = BreakLine(line); while (!reader.EndOfStream) { data = BreakLine(line); DataRow dr = _DataTable.NewRow(); // protect against overflow int maxColumns = Math.Min(_DataTable.Columns.Count, data.Length); for (int i = 0; i < maxColumns; i++) { dr[i] = data[i]; } _DataTable.Rows.Add(dr); line = reader.ReadLine(); } return _DataTable; } finally { reader.Close(); reader.Dispose(); stream.Close(); } }
RichieHindle.. 11
这是问题:因为你有这个:
line = reader.ReadLine();
作为while
循环的最后一行,它将读取最后一行然后丢弃它,因为while
条件将返回false.
我想你需要这个:
try { while (!reader.EndOfStream) { string line = reader.ReadLine(); string[] data = BreakLine(line); DataRow dr = _DataTable.NewRow(); // protect against overflow int maxColumns = Math.Min(_DataTable.Columns.Count, data.Length); for (int i = 0; i < maxColumns; i++) { dr[i] = data[i]; } _DataTable.Rows.Add(dr); } return _DataTable; } finally { ...
因此,您只需阅读每一行,这是您每次循环时所做的第一件事.
这是问题:因为你有这个:
line = reader.ReadLine();
作为while
循环的最后一行,它将读取最后一行然后丢弃它,因为while
条件将返回false.
我想你需要这个:
try { while (!reader.EndOfStream) { string line = reader.ReadLine(); string[] data = BreakLine(line); DataRow dr = _DataTable.NewRow(); // protect against overflow int maxColumns = Math.Min(_DataTable.Columns.Count, data.Length); for (int i = 0; i < maxColumns; i++) { dr[i] = data[i]; } _DataTable.Rows.Add(dr); } return _DataTable; } finally { ...
因此,您只需阅读每一行,这是您每次循环时所做的第一件事.
快速提示 - 您在finally块中不需要这个:
finally { reader.Close(); reader.Dispose();
由于您有一个"阅读器"的使用块,即使有异常,它也会自动为您处理.