从文本文件读取 C#
本文关键字:读取 文件 文本 | 更新日期: 2023-09-27 18:30:33
我正在读取一个具有某种格式的文本文件。我跳过前两行,然后阅读名字,第二个名字,然后创建一个名字,第二个名字的列表。一切都是工作文件,但是当最后一行为空时,我的程序停止工作并给出错误。如何避免使用空格,以便我的程序不会停止我的代码是:
public void Read(string filename, List<Person> person)
{
using (StreamReader sr = new StreamReader(filename))
{
sr.ReadLine();
sr.ReadLine();
while (!sr.EndOfStream)
{
FirstName= sr.EndOfStream ? string.Empty : sr.ReadLine();
LastName= sr.EndOfStream ? string.Empty : sr.ReadLine();
person.Add(new Person(FirstName, LastName));
}
}
}
文件格式为
Students Data
Description
FirstName
LastName
FirstName
LastName
FirstName
LastName
FirstName
LastName
出了什么问题,无论文档是否有下一行,都会执行sr.ReadLine()
,所以它可能会返回 null(如果你的行数用完了)只需检查sr.ReadLine()
是否返回null
public void Read(string filename, List<Person> person)
{
using (StreamReader sr = new StreamReader(filename))
{
sr.ReadLine();
sr.ReadLine();
while (!sr.EndOfStream)
{
String FirstName = sr.ReadLine() ?? "-not defined-";
String LastName = sr.ReadLine() ?? "-not defined-";
person.Add(new Person(FirstName, LastName));
}
}
}
你可以为 StreamReader 类创建一个适配器,如下所示
public class NoBlankStreamReader : StreamReader
{
public NoBlankStreamReader(FileStream fs) : base(fs) { }
private bool IsBlank(string inString)
{
if (!string.IsNullOrEmpty(inString)) inString = inString.Trim();
return string.IsNullOrEmpty(inString);
}
public override string ReadLine()
{
string result= base.ReadLine();
while (result!=null && IsBlank(result))
result = base.ReadLine();
return result;
}
}
然后像这样使用:
using (FileStream fs=File.OpenRead(@"test.txt"))
using (TextReader reader = new NoBlankStreamReader(fs))
{
while (reader.Peek() > -1)
Console.WriteLine(reader.ReadLine());
}
或者你可以看到帖子:
如何使用 C# 读取文本文件时删除空行