C# 为什么找不到或未打开我的文件?

C# 为什么找不到或未打开我的文件?,c#,winforms,file-io,nullreferenceexception,C#,Winforms,File Io,Nullreferenceexception,我在\bin\Debug文件夹中添加了一个.txt文件,并尝试打开它并从中读取,如下所示: using (StreamReader reader = File.OpenText("Credentials.txt")) { string line = null; do { line = reader.ReadLine(); if (line.Contains("host=")) { . . . 但是,尽管文件在那里,但当我到达“ReadLi

我在\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=对象引用未设置为对象的实例

更新
我必须将其从“
do…while(line!=null);
”更改为“
while(!reader.EndOfStream)

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

  using (StreamReader sr = new StreamReader("c:\\Users\\fullpath\\file.txt"))

那没有道理。我不知道有哪种情况下
File.OpenText
成功返回,返回值为
null
。如果
File.OpenText
找不到该文件,它将抛出
FileNotFoundException

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


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

while ((line = reader.ReadLine()) != null) {
    if (line.Contains("host=")) {
    }
}
我并不是说这是最好的方式(我不认为是),但这是C#中的一个常见习语

如果您坚持认为自己是正确的,请打印

Console.WriteLine(reader == null);
你会把它放在

line = reader.ReadLine();

行。

@repo:这解决了什么问题?文件在哪里?您是否尝试过在
OpenText()
命令中设置完整路径以查看它是否有效?运行时,检查哪个是当前文件夹。
StreamReader.ReadLine
将在这些行上返回
String.Empty
。它只使用
null
来标记流的结束。是的,它正在读取流的结束,然后爆炸(在成功读取了所有我想要的内容后,它继续运行。我在上面的附录中对其进行了更改。