0

.txtファイルを\bin\ Debugフォルダーに追加し、次のように開いて読み取ろうとしています。

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)」に変更する必要がありました

4

2 に答える 2

6

それは意味がありません。File.OpenText正常に戻り、戻り値がであるシナリオを私は知りませんnullFile.OpenTextファイルが見つからない場合は、をスローしますFileNotFoundException

あなたが述べている行が実際に例外を投げている行であると確信していますか?スタックトレースを注意深く確認してください。

ループの順序が間違っていることに注意してください。呼び出しStreamReader.ReadLineて、行に「host=」が含まれているかどうかを確認しています。ただし、ストリームの最後に到達した場合lineは、nullになり、スローされます。ループを書き直す1つの方法は、次のように言うことです。

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 に答える