0

我在 \bin\Debug 文件夹中添加了一个 .txt 文件,并尝试像这样打开它并从中读取:

using (StreamReader reader = File.OpenText("Credentials.txt")) {
    string line = null;
    do {
        line = reader.ReadLine();
        if (line.Contains("host=")) {
    . . .

但是,尽管文件在那里,但当我到达“ReadLine()”行时,它会停止在其轨道上,并显示:

System.NullReferenceException 未处理 Message=Object 引用未设置为对象的实例。

更新

我不得不把它从“ do...while (line != null);”改成“ while (! reader.EndOfStream)

4

2 回答 2

6

那没有意义。我不知道任何File.OpenText成功返回且返回值为null. 如果File.OpenText找不到文件,它会抛出一个FileNotFoundException.

您确定您声明的那一行实际上是引发异常的那一行吗?请仔细检查堆栈跟踪。

请注意,您的循环顺序错误。您正在调用StreamReader.ReadLine然后检查该行是否包含“host=”。但可能是您已到达流的末尾,在这种情况下line将为 null 并且您将抛出。重写循环的一种方法是说

while ((line = reader.ReadLine()) != null) {
    if (line.Contains("host=")) {
    }
}

我并不是说这是最好的方法(我认为不是),但它是 C# 中的一个常见习语。

如果你坚持你是正确的,请打印输出

Console.WriteLine(reader == null);

您将立即放置在

line = reader.ReadLine();

线。

于 2012-05-31T00:14:53.677 回答
1

尝试使用文件的完整路径:

  using (StreamReader sr = new StreamReader("c:\\Users\\fullpath\\file.txt"))
于 2012-05-31T00:13:51.287 回答