我正在尝试使用代码(粘贴在下面)读取文本文件,但文件的最后一行无法读取。我的逻辑是否正确?
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();
}
}
答案 0 :(得分: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
{
...
所以你只需阅读每一行作为你每次循环时做的第一件事。
答案 1 :(得分:5)
快速提示 - 你在finally块中不需要这个:
finally
{
reader.Close();
reader.Dispose();
由于你有一个“阅读器”的使用块,它会自动为你处理,即使有例外。