2017-09-14 7 views
-2
private void btn_Save_Click(object sender, EventArgs e) 
    { 
     // Declare int variable. 
     int randomNumber = 0; 

     // Declare a StreamWriter variable. 
     StreamWriter outputFile; 

     // Get the number of random integers to hold in file. 
     int number = int.Parse(txt_Number.Text); 

     if (saveFile.ShowDialog() == DialogResult.OK) 
     { 
      // Create the selected file. 
      outputFile = File.CreateText(saveFile.FileName); 

      // Create a Random Object. 
      Random Rand = new Random(); 

      for (int count = 0; count < number; count++) 
      { 
       // Get random integers and assign them to randomNumber. 
       randomNumber = Rand.Next(1, 101); 

       // Write data to the file. 
       outputFile.WriteLine(randomNumber); 

       // Close the file. 
       outputFile.Close(); 

       MessageBox.Show("File saved in path:" + saveFile.FileName); 
      } 
     } 
     else 
     { 
      // Display an error message. 
      MessageBox.Show("Operation Cancelled"); 
     } 
    } 

    private void btn_Clear_Click(object sender, EventArgs e) 
    { 
     // Clear the TextBox. 
     txt_Number.Text = ""; 
    } 

    private void btn_Exit_Click(object sender, EventArgs e) 
    { 
     // Close the form. 
     this.Close(); 
    } 
} 

質問です:ファイルへの一連の乱数を書き込むプログラムを作成します。各乱数は1〜100の範囲内にある必要があります。アプリケーションでは、ファイルが保持する乱数の数を指定できます。のVisual C#乱数ファイルライタ

コードが働いているが、私は」出力WriteLineメソッドで問題が発生しました。私はプログラムを実行している たびに、それは例外が未処理と言うとクローズしたTextWriterに書き込むことはできません。 また、複数の乱数を保存する代わりに、1つだけを保存しています。 これらの2つの問題に関する助けがあれば素晴らしいでしょう。

+3

エラーのどの部分を理解していませんか?あなたのコードはファイルを閉じた後にファイルに書き込もうとします。 – SLaks

+3

ファイルに書き込むループの前にブレークポイントを設定します。プログラムを実行し、F10キーを使用して行単位でコードをステップ実行します。細心の注意を払う - 非常に近い、注意を集中させる - あなたのコードが行うすべてのことに注意を払う。あなたは啓発されるでしょう。私は宇宙の意識を約束することはできませんが、あなたのコードは少なくとも動作するでしょう。 –

+3

@EdPlunkett:ねえ、私はあまりにも、他の問題に、このアプローチを使用しています。これは問題を解決するための一般的なアプローチだと思いますか? –

答えて

-2

あなたのエラーは、ここでは、forループである:

for (int count = 0; count < number; count++) 
     { 
      // Get random integers and assign them to randomNumber. 
      randomNumber = Rand.Next(1, 101); 

      // Write data to the file. 
      outputFile.WriteLine(randomNumber); 

      // Close the file. 
      outputFile.Close(); 

      MessageBox.Show("File saved in path:" + saveFile.FileName); 
     } 

あなたはすべての数字を反復処理する前に、ファイルを閉じます。したがって、最初の番号を書き込むことはできません。 close関数はforループの外側にある必要があります。

for (int count = 0; count < number; count++) 
     { 
      // Get random integers and assign them to randomNumber. 
      randomNumber = Rand.Next(1, 101); 

      // Write data to the file. 
      outputFile.WriteLine(randomNumber); 

      MessageBox.Show("File saved in path:" + saveFile.FileName); 
     } 


     // Close the file outside for loop 
     outputFile.Close(); 
+0

ありがとうございます。私は実際にこの間違いを最初に認識していませんでした –

+0

'Close'を直接使うのはお勧めできません。あなたは、 'Close'と' Dispose'を正しく呼び出す 'using'ステートメントを推薦するべきです –