无法访问字符串行上的阅读器= reader.ReadLine();

时间:2015-05-10 09:48:06

标签: c# exception

if (Easy)
{
    try
    {
        reader = File.OpenText(@"../../TxtFiles/eneral_Easy.txt");
        throw new FileNotFoundException();
    }
    catch (FileNotFoundException ex)
    {
        Console.WriteLine("Kan het bestand General_Easy.txt niet vinden!" + ex.Message);
    }
}
else
{
    reader = File.OpenText(@"../../TxtFiles/General_Hard.txt");
}

string line = reader.ReadLine();
while (line != null)
{
    questionList.Add(line);
    line = reader.ReadLine();
}
reader.Close();
NumberOfQuestions = questionList.Count;

2 个答案:

答案 0 :(得分:1)

如果找不到该文件,

File.OpenText将抛出异常。我不确定你为什么每次都抛出异常 - 你几乎可以肯定地删除它。

您捕获异常并写入消息,但您不会在此处停止执行。当你到达reader.ReadLine() reader时,从未实例化过null。这就是你获得NullReferenceException的原因。我怀疑你想在失败后才回来。

try
{
    reader = File.OpenText(@"../../TxtFiles/eneral_Easy.txt");    
}
catch (FileNotFoundException ex)
{
    Console.WriteLine("Kan het bestand General_Easy.txt niet vinden!" + ex.Message);
    return;
}

答案 1 :(得分:0)

try
{
    reader = File.OpenText(@"../../TxtFiles/eneral_Easy.txt");
    throw new FileNotFoundException();
}

无论文件是否实际读入,上面的代码都会抛出异常。

如果您想在找不到问题文件时将消息转储到控制台,那么您可以只是将异常和堆栈跟踪转储到控制台 - 而不是简单地将消息转移到控制台。不用尝试/捕捉让你的程序崩溃。

但是,如果你想实现一些功能,你设计程序来处理这样的异常并恢复,你可以这样做:

try
{
    reader = File.OpenText(@"../../TxtFiles/eneral_Easy.txt");
}
catch (FileNotFoundException ex)
{
    Console.WriteLine("Kan het bestand General_Easy.txt niet vinden!" + ex.Message);
    var suggestedPath = /* logic to get possible path from another source */ 
    reader = File.OpenText(path); // Will throw again if fails
}