Pra*_*bhu 2 .net c# file-io stream
我试图使用代码(粘贴在下面)读取文本文件,但文件的最后一行不会被读取.我的逻辑是否正确?
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*dle 11
这是问题:因为你有这个:
line = reader.ReadLine();
Run Code Online (Sandbox Code Playgroud)
作为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
{
...
Run Code Online (Sandbox Code Playgroud)
因此,您只需阅读每一行,这是您每次循环时所做的第一件事.
快速提示 - 您在finally块中不需要这个:
finally
{
reader.Close();
reader.Dispose();
Run Code Online (Sandbox Code Playgroud)
由于您有一个"阅读器"的使用块,即使有异常,它也会自动为您处理.