1

プログラムに車のトランクの販売のリストを追加し、チャリティーなどのためかどうかを指定できるプログラムがあります。チャリティー向けの車のブーツの販売とそうでないもののリストを生成するボタンもあります。別のテキスト ファイルに。チャリティー ブーツの販売をアプリケーションに追加してリストを生成すると、ファイルに正常に書き込まれます。ただし、アプリケーションを再度ロードしてファイルを生成しようとすると、空のリストが生成されます。(終了時にアプリケーションデータを保存し、起動時にデータをリロードする機能があります)。

なぜこれが起こっているのかわかりませんか??

ファイルへのリストを生成するためのボタンの背後にあるコードは次のとおりです。

        List<CarBootSale> carbootsales = carBootSaleList.ReturnList();
        carbootsales.Sort(delegate(CarBootSale bs1, CarBootSale bs2)
        {
            return Comparer<string>.Default.Compare(bs1.ID, bs2.ID);
        });
        textReportGenerator.GenerateCharityReport(carbootsales, AppData.CHARITY);
        MessageBox.Show("All the Charity Car Boot Sales have been written to the report file: " + AppData.CHARITY);

レポートを生成する TextReportGenerator クラスのコードは次のとおりです。

        FileStream outFile;
        StreamWriter writer;

        //create the file and write to it
        outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);
        writer = new StreamWriter(outFile);

        //For each object in the list, add it to the file
        foreach (CarBootSale obj in CharityList)
        {
            if (obj.Charity == "true")
            {
                writer.WriteLine(obj.Display());
            }
        }
        //close the file which has been opened
        writer.Close();
        outFile.Close();
4

1 に答える 1

1

あなたのコードはほとんど問題ないように見えるので (注: 以下を参照)、コード全体をローカルで実行しないと、using.

次のようなコードの使用を検討してください。

    using(FileStream outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    using(StreamWriter writer = new StreamWriter(outFile)) {

        //For each object in the list, add it to the file
        foreach (CarBootSale obj in CharityList) {
            if (obj.Charity == "true") {
                writer.WriteLine(obj.Display());
            }
        }

    }

私の推測では、メソッドに処理されていない例外があるDisplayため、への呼び出し.Closeが行われないため、データがバッファからディスクにフラッシュされることはありません。ブロックを使用するusingと、何が起こっても (例外または時期尚早return)、ストリームのバッファーがデータを失うことなくディスクに書き込まれることが保証されます。

ちょっとしたこと: なぜ.Charity文字列なのか? booleanまたはenumプロパティではないのはなぜですか?

于 2013-03-01T22:44:18.737 に答える