0

フォームクロージング イベントで文字列をテキスト ファイルに書き込もうとしています。問題は、ストリームライターが何も書き込まず、空白の状態を書き込むだけであることです。2 つの異なるテキスト ファイルがあります。最初のファイルにはすべてのグラフ データが記録され、2 番目のテキスト ファイルにはアプリケーションに関連するいくつかの設定が記録されます。クロージング イベントと別の主力メソッドの両方について、私のコードを以下に示します。

  private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {


        if (e.CloseReason.Equals(CloseReason.WindowsShutDown) || (e.CloseReason.Equals(CloseReason.UserClosing))) 
        {
            if (MessageBox.Show("You are closing this application.\n\nAre you sure you wish to exit ?", "Warning: Not Submitted", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Stop) == DialogResult.Yes)
            {

                writeContents("Interrupted");

                return;
            }

            else
                e.Cancel = true; 
        } 



    }

    private void writeContents(string status)
    {

        //---writes the graph data-----
        TextWriter twBackupData = new StreamWriter("C://springTestBackupData.txt");

        twBackupData.WriteLine("--Cycle#-- --TorqueLower-- --TorqueUpper--");

        //writes the table of values in there, assume x and y are the same size arrays
        for(int i = 0; i < x.Count; i++)
        {               
            twBackupData.WriteLine(x[i] + "   " + y_lower[i] + "   " + y_upper[i]);
        }


        //---writes some of the preferences------
        TextWriter twBackupDataInfo = new StreamWriter("C://springTestBackupInfo.txt");

        twBackupDataInfo.WriteLine(status);
        twBackupDataInfo.WriteLine(cycleCount.ToString());
        twBackupDataInfo.WriteLine(section.ToString());
        twBackupDataInfo.WriteLine(revsPerCycle.ToString());
        twBackupDataInfo.WriteLine(preturns.ToString());
        twBackupDataInfo.WriteLine(direction.ToString());

    }

アドバイスを提供したり、空白を書いている理由を見つけるのを手伝ってくれたりすることができれば、とても感謝しています. ありがとうございました!

4

4 に答える 4

2

StreamWriterusing theusingステートメントを閉じる必要があります。

于 2012-05-16T16:10:32.560 に答える
1

使用する方がはるかに簡単です:

var linesToWrite = new list<string>();

linesToWrite.Add(status);
linesToWrite.Add(cycleCount.ToString());
...

File.WriteAllLines("C://springTestBackupData.txt", linesToWrite);
于 2012-05-16T16:11:25.350 に答える
1

ライターを閉じる/破棄する必要があります。そうしないと、ストリームがフラッシュされません (つまり、データがファイルに書き込まれます)。

「using」ステートメントを使用すると、オブジェクトがスコープ外になると自動的に破棄されます。

using(TextWriter twBackupData = new StreamWriter("C://springTestBackupData.txt"))
{
     // Do your stuff here - write to the tw ---


    twBackupData.WriteLine("--Cycle#-- --TorqueLower-- --TorqueUpper--");   

    //writes the table of values in there, assume x and y are the same size arrays   
    for(int i = 0; i < x.Count; i++)   
    {                  
        twBackupData.WriteLine(x[i] + "   " + y_lower[i] + "   " + y_upper[i]);   
    }   
}

ファイルが確実に書き込まれるようにします

詳細はこちら:

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

于 2012-05-16T16:12:31.997 に答える
0

.Close()StreamWritersで行う必要があります。

于 2012-05-16T16:10:57.927 に答える