C# StreamReader.EndOfStream缺少最后一行?
我试图使用代码(粘贴在下面)读取文本文件,但文件的最后一行无法读取。我的逻辑正确吗C# StreamReader.EndOfStream缺少最后一行?,c#,.net,file-io,stream,C#,.net,File Io,Stream,我试图使用代码(粘贴在下面)读取文本文件,但文件的最后一行无法读取。我的逻辑正确吗 using (StreamReader reader = new StreamReader(stream)) { try { string line = reader.ReadLine(); string[] data = BreakLine(line);
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();
}
}
使用(StreamReader=新的StreamReader(stream))
{
尝试
{
字符串行=reader.ReadLine();
字符串[]数据=特征线(线);
而(!reader.EndOfStream)
{
数据=特征线(直线);
DataRow dr=_DataTable.NewRow();
//防止溢出
int maxColumns=Math.Min(_DataTable.Columns.Count,data.Length);
对于(int i=0;i
问题是:因为您有:
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
{
...
试试看
{
而(!reader.EndOfStream)
{
字符串行=reader.ReadLine();
字符串[]数据=特征线(线);
DataRow dr=_DataTable.NewRow();
//防止溢出
int maxColumns=Math.Min(_DataTable.Columns.Count,data.Length);
对于(int i=0;i
因此,您只需将每一行作为每次循环的第一件事来阅读即可。一个快速提示-您不需要在最后一块中使用此提示:
finally
{
reader.Close();
reader.Dispose();
由于“reader”有一个Using块,即使出现异常,它也会自动为您处理。另一个选项是使用do while循环,并对reader.Peek()进行while条件检查!=-1我同意突破,只要使用脚控制的循环,事情就会顺利进行。遗憾的是,今天的大多数程序员并不关心何时使用哪种循环。@突破,@BeowulfOF:当给定一个空文件时,while循环将如何工作?@breakdown您能演示Peek()吗?