1

C# を使用して txt ファイルを読み書きしようとしています。現時点では、リスト内の名前を読み取り、それらをユーザーに表示し、別の名前を要求してから、その名前をリストに追加するプログラムを作成しています。読みは問題ありませんが、書き方に問題があります。

コードは CSC を使用して正常にコンパイルされ、正常に実行されますが、追加する名前を入力して Enter キーを押すと、次のようなウィンドウがポップアップ表示されます。

FileIO.exe で問題が発生したため、終了する必要があります。

問題は何ですか?

using System;
using System.IO;

public class Hello1
{
    public static void Main()
    {   
        int lines = File.ReadAllLines("Name.txt").Length;
        string[] stringArray = new string[lines + 1];
        StreamReader reader = new StreamReader("Name.txt");
        for(int i = 1;i <=lines;i++){
            stringArray[i-1] = reader.ReadLine();
        }
        for (int i = 1;i <=stringArray.Length;i++){
            Console.WriteLine(stringArray[i-1]);
        }
        Console.WriteLine("Please enter a name to add to the list.");
        stringArray[lines] = Console.ReadLine();
        using (System.IO.StreamWriter writer = new System.IO.StreamWriter("Name.txt", true)){
            writer.WriteLine(stringArray[lines]);
        }
    }
}
4

5 に答える 5

1

コンソール アプリケーションのトップ レベルで例外を把握しておくことをお勧めします。

public class Hello1
{
    public static void Main()
    {
        try
        {
            // whatever
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception!);
            Console.WriteLine(ex.ToString());
        }
        finally
        {
            Console.Write("Press ENTER to exit: ");
            Console.ReadLine();
        }
    }
}

これにより、アプリケーションを閉じる必要があった理由がわかります。

さらに、ブロックStreamReader内にある必要があります。using

于 2013-10-08T20:34:09.283 に答える
0

ファイルからすべての行を配列に読み込みたい場合は、次のように簡単に使用できます。

string[] lines = File.ReadAllLines("Name.txt");

そして、その配列を使用します。

于 2013-10-08T20:22:53.557 に答える
-2

次のように reader.ReadToEnd 関数を使用し、終了したらリーダーを閉じることを忘れないでください。

StreamReader reader = new StreamReader("Name.txt");
string content = reader.ReadToEnd();
reader.Close();

その例外が発生する理由は、読み取り後にリーダーを閉じていないためです。したがって、最初に Close(); を呼び出さないと書き込みできません。方法。

次のように閉じる代わりに、using ステートメントを使用することもできます。

using (StreamReader reader = new StreamReader("Name.txt")){
    string content = reader.ReadToEnd();
};
于 2013-10-08T20:21:07.287 に答える