• 締切済み

【C#】作成したファイルに書き込みしたい

開発環境はMicrosoft VisualC#2008です。 C#初心者です。よろしくお願いします。 現在、Form1とUserControl1を組み合わせてパズルゲームを作成中です。 Form1でボタンをクリックすると、クリックした日時を取得して、その日時をファイル名とするテキストファイルを作成することは出来ました。(例:20100115154717.txt) 今度は、そのファイルをUserControl1で開いて、書き込みをしていきたいのですが、エラーが出てしまい、この作成したファイルに書き込むことが出来ない状況です。 ※ちなみに、別のファイル(log_sample.txt)を指定したら書き込みは出来ました。 アドバイスよろしくお願いします。 <Form1.cs>一部抜粋 public string File_name { get { return this.file_name; } set { this.file_name = value; } } private void select_button_Click(object sender, EventArgs e) { //開いた時刻をファイル名に指定 DateTime dt = DateTime.Now; file_name = dt.ToString("yyyyMMddHHmmss"); //ログファイル作成・データ追加 StreamWriter sw = new StreamWriter(new FileStream"C:\\Documents and Settings\\My Documents\\log\\" + file_name + ".txt", FileMode.CreateNew)); } <UserControl1.cs>一部抜粋 //候補選択 private void label1_Click(object sender, EventArgs e) { Form1 f1 = this.Controls["Form1"] as Form1; DateTime dt = DateTime.Now; //ログ書き込み(日付、場所(ユーザーコントロール、ラベル名)、クリック(1)orダブルクリック(2)) StreamWriter sw = new StreamWriter(new FileStream("C:\\Documents and Settings\\My Documents\\log\\"+ f1.File_name +".txt", FileMode.Append)); sw.Write(dt.ToString()+","); sw.Write(this.Name +","); sw.Write("label1,"); sw.WriteLine("1"); sw.Close(); }

みんなの回答

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.2

エラーメッセージを書きましょう。 一見すると、#1の回答者の指摘が真っ先に浮かぶのですが、エラーメッセージがわかれば、もっとアドバイスが出来るかと思います。

回答No.1

FormやらUserControlやらの中に処理を書くことの可否はともかく……。 Form側で作成したときに,ちゃんとStreamWriterを閉じていますか。 原則として,System.IO.Streamの継承クラスやStreamWriter/StreamReaderをnewしたり,File.Open等で取得した場合は, usingステートメントを使うべきです。 > StreamWriter sw = new StreamWriter(new FileStream"C:\\Documents and Settings\\My Documents\\log\\" + file_name + ".txt", FileMode.CreateNew)); using (var stream = File.Create(@"C:\Documents and Settings\My Documents\log\" + file_name + ".txt")) { } // stream.Disposeが呼び出され,streamが閉じられる > StreamWriter sw = new StreamWriter(new FileStream("C:\\Documents and Settings\\My Documents\\log\\"+ f1.File_name +".txt", FileMode.Append)); ... > sw.Close(); using (var sw = File.AppendText(@"C:\Documents and Settings\My Documents\log\" + file_name + ".txt")) { ... } // sw.Disposeが呼び出され,swが閉じられる

sss-aoring
質問者

補足

ご回答ありがとうございます。 ここには記入し忘れたのですが、ちゃんとStreamWriterは閉じています。すみません。 実際は以下のように記入しています。 <Form1.cs(一部)> public void select_button_Click(object sender, EventArgs e) { int Num = this.listBox1.SelectedIndex - 1; if (this.listBox1.SelectedIndex == -1) { MessageBox.Show("選択されていません。", "通知"); } else { //問題読み込み //StreamReaderオブジェクトの作成 StreamReader sr = new StreamReader("C:\\Documents and Settings\\My Documents\\no"+ Num+ ".txt", Encoding.Default); //開いた時刻をファイル名に指定 DateTime dt = DateTime.Now; file_name = dt.ToString("yyyyMMddHHmmss"); //ログファイル作成・データ追加 StreamWriter sw = new StreamWriter(new FileStream("C:\\Documents and Settings\\My Documents\\log\\" + file_name + ".txt", FileMode.CreateNew)); //作成日時 sw.Write(dt.ToString()+","); //問題番号 sw.WriteLine("no"+ Num ); //1行ずつ読み込み string dat; //文字を入れる int i = 1; while ((dat = sr.ReadLine()) != null) { //カンマで区切られた文字列を取得 string[] sbuf = dat.Split(','); //読み込んだデータをラベルテキストに代入 UserControl1 c1 = this.Controls["userControl1" + i.ToString()] as UserControl1; c1.Number = sbuf[1]; i++; } //ファイルを閉じる sr.Close(); sw.Close(); } } アドバイスいただいたusingステートメントは使ったことがないので、書き直そうと試みましたがエラーが出て書き直せばよいかわかりませんでしたm(__)m 出来れば今の状態のまま改良したいのですが・・・可能でしょうか?;;

関連するQ&A