StreamReader 在 while 循环中读取 null
StreamReader reads null in while loop
使用这种方法,我循环遍历一个文件,删除其中带有 'T'
的行并将它们存储到列表中。在循环结束时它应该退出,但是它读取 null
值并继续传递它并抛出异常消息...
System.ArgumentNullException: 'Value cannot be null. Parameter name: source'
...在它试图寻找字符的地方。
public static List<string> GetToolsFromFile()
{
FileStream FS = new FileStream(OpenFile(), FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(FS))
{
char c = 'T';
while (Sr.ReadLine() != null)
{
string line = Sr.ReadLine();
//MessageBox.Show(line.ToString());
if (line.Contains(c))
{
list.Add(line);
// MessageBox.Show(line.ToString());
}
}
FS.Close();
}
return list;
}
OpenFile()
是使用OpenFileDialog
的方法。这已经过测试并在检索和显示所选文件的内容时正常工作。
您正在调用 ReadLine 方法 两次 次。第一次在 while 循环条件中,第二次在 while 体内。假设您的文件有 3 行,这里是对 ReadLine 方法的调用:
- 在循环条件下,它读取第一行。
- 在循环体中,它读取第二行并将其赋值给
line
变量。
- 在循环条件下,读取第三行(也就是最后一行)
- 在循环体中,它 returns 为 null,因此您的
line
变量被分配给 null 然后您在空字符串上调用 Contains
方法。这就是异常所说的。
请查看更正后的代码
FileStream FS = File.Open(@"c:\path_to_The_File", FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(FS))
{
char c = 'T';
string line = Sr.ReadLine();
while (line != null)
{
//MessageBox.Show(line.ToString());
if (line.Contains(c))
{
list.Add(line);
// MessageBox.Show(line.ToString());
}
line = Sr.ReadLine();
}
FS.Close();
}
使用这种方法,我循环遍历一个文件,删除其中带有 'T'
的行并将它们存储到列表中。在循环结束时它应该退出,但是它读取 null
值并继续传递它并抛出异常消息...
System.ArgumentNullException: 'Value cannot be null. Parameter name: source'
...在它试图寻找字符的地方。
public static List<string> GetToolsFromFile()
{
FileStream FS = new FileStream(OpenFile(), FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(FS))
{
char c = 'T';
while (Sr.ReadLine() != null)
{
string line = Sr.ReadLine();
//MessageBox.Show(line.ToString());
if (line.Contains(c))
{
list.Add(line);
// MessageBox.Show(line.ToString());
}
}
FS.Close();
}
return list;
}
OpenFile()
是使用OpenFileDialog
的方法。这已经过测试并在检索和显示所选文件的内容时正常工作。
您正在调用 ReadLine 方法 两次 次。第一次在 while 循环条件中,第二次在 while 体内。假设您的文件有 3 行,这里是对 ReadLine 方法的调用:
- 在循环条件下,它读取第一行。
- 在循环体中,它读取第二行并将其赋值给
line
变量。 - 在循环条件下,读取第三行(也就是最后一行)
- 在循环体中,它 returns 为 null,因此您的
line
变量被分配给 null 然后您在空字符串上调用Contains
方法。这就是异常所说的。
请查看更正后的代码
FileStream FS = File.Open(@"c:\path_to_The_File", FileMode.Open);
List<string> list = new List<string>();
using (StreamReader Sr = new StreamReader(FS))
{
char c = 'T';
string line = Sr.ReadLine();
while (line != null)
{
//MessageBox.Show(line.ToString());
if (line.Contains(c))
{
list.Add(line);
// MessageBox.Show(line.ToString());
}
line = Sr.ReadLine();
}
FS.Close();
}