1

大学の課題があり、それは非常に基本的なコーディングだけですが、やらなければなりません

ユーザーは、レコードをファイルに保存できる必要があります。起動時に、ユーザーはレコードのファイルを選択し、これらをプログラムにロードできます。

これは保存されるので問題がありますが、プログラムを閉じて再度開くと消えてしまいます。助けていただければ幸いです。

これは私がこれまでに持っているものです:

private void Save_Click(object sender, EventArgs e)
{

    SaveToFile(records, file);
}

private void SaveToFile(List<Client> records, string file)
{

    //File.WriteAllText(file, String.Empty);
    StreamWriter writer = new StreamWriter(file);
    StreamReader reader = new StreamReader(file);

    try
    {
        AddMember();

        for (int i = 0; i < records.Count; i++)
        {
            writer.WriteLine(records[i].WriteToFile());
        }

        writer.Close();
    }
    catch (IOException z)
    {
        MessageBox.Show("Error" + z);
    }
}
4

3 に答える 3

0

StreamWriter を閉じる前に、Flush() メソッドを呼び出す必要があります。Flush() 現在のライターのすべてのバッファーをクリアし、バッファー内のデータを基になるストリームに書き込みます。

于 2013-09-21T05:22:50.363 に答える
0
reader.clos();

あなたはこれを忘れた

于 2013-09-21T05:23:35.117 に答える
0

これは単なる推測ですが、プログラムの起動時にファイルを上書きしているように思えます。

SaveToFileメソッドでは、最初に次の 2 行があります。

StreamWriter writer = new StreamWriter(file);
StreamReader reader = new StreamReader(file);

1 つ目は、.in という名前の新しいファイルを作成しますfile。ファイルからの読み取りを行っていない場合、2 番目は必要ありません。

ここで、メソッドが呼び出される前に実行されるプログラムの別の場所に同様のコード ブロックがある場合SaveToFile、ファイルが上書きされます (そして、コードの前半部分には何も記述しない可能性が高いため、空のファイルが残ります)。

これを防ぐために、私が提供する2つの提案があります。

  1. StreamWriterファイルに書き込むときにのみ作成します。それ以外のStreamWriter場合は、既存のファイルを上書きします。

  2. ファイルを上書きしたくない場合は、2 番目のパラメーター (ブール値) を受け取るコンストラクターのオーバーロードを使用して、新しいデータをファイルに追加するかどうかを示すことができます。

    StreamWriter ライター = 新しい StreamWriter(ファイル、真);

さらに、ブロックを知って使用することをお勧めします。これにより、例外が発生して処理されない場合でも、(およびその基になるストリーム) をusing閉じてフラッシュすることができます。StreamWriter

private void SaveToFile(List<Client> records, string file)
{

    try
    {
        AddMember();

        // If you don't want to append but overwrite, use:
        // using (StreamWriter writer = new StreamWriter(file))
        using (StreamWriter writer = new StreamWriter(file, append))
        {

            for (int i = 0; i < records.Count; i++)
            {
                writer.WriteLine(records[i].WriteToFile());
            }
        }
    }
    catch (IOException z)
    {
        MessageBox.Show("Error" + z);
    }
}
于 2013-09-21T05:48:46.453 に答える