質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

592閲覧

C# テキスト書き込み

ty_m_c_t

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/06/26 05:14

この度初めてC#を仕事で使うことになり独学で勉強しているのですが、現在このコードを使用すると、ファイルは作成されるがテキストが保存されていない状態になってしまってます。

ボタンを押すと選択された日付と、入力されたテキストが保存され、ファイルを開く日付とテキストがメモ帳で文字として見れるようしようとしています・・・

以下が書いてみたコードになります。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using System.Windows.Forms; namespace WindowsFormsApp33 { public partial class Form1 : Form { public Form1() { InitializeComponent(); DateTime dtToday = DateTime.Today; comboBox1.Items.Add(dtToday); DateTime dtTomorrow = dtToday.AddDays(1); comboBox1.Items.Add(dtTomorrow); DateTime dtDAT = dtToday.AddDays(2); comboBox1.Items.Add(dtDAT); DateTime dt3DL = dtToday.AddDays(3); comboBox1.Items.Add(dt3DL); } private void button2_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "ファイルを保存する"; sfd.InitialDirectory = @"C:\Users\xx\Documents"; sfd.Filter = "(*.testF)|*.testF|" + "All files(*.*)|*.*"; sfd.FilterIndex = 1; sfd.FileName = "新しいファイル.testF"; DialogResult result = sfd.ShowDialog(); string fname = sfd.FileName; FileStream fs = new FileStream(sfd.FileName, FileMode.Create); FilesIO filesIO = new FilesIO(); filesIO.File_Save(comboBox1.Text,textBox1.Text,fname); } private void textBox1_TextChanged(object sender, EventArgs e) { } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { } private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) { } private void Form1_Load(object sender, EventArgs e) { } } class FilesIO:Form1 { public int File_Save(string a, string b,string c) { Form1 form1 = new Form1(); StreamWriter sr = null; try { sr = new StreamWriter(@"C:\Users\xx\Desktop.txt", false, Encoding.GetEncoding("shift_jis")); sr.WriteLine(a); sr.Write(b); sr.Close(); return 0; } catch { return 1; } } } }

パスの名前は変更していますがエラーは出ていないのを確認しています。

テキストを書き込めるようにするにはどうしたらよいかご助言お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

DialogResult result = sfd.ShowDialog();

返り値を無視してるけど、これでいいの?

FileStream fs = new FileStream(sfd.FileName, FileMode.Create);

FileStreamを使ってファイルを作ってるけど、以後放置で書き込みを行っていない

filesIO.File_Save(comboBox1.Text,textBox1.Text,fname);

で、Filestreamでファイルを作って開きっぱなしにしてるので、これ以降ファイル操作しようとしても例外が出て書き込みできない

C#

1 DialogResult result = sfd.ShowDialog(); 2 if(DialogResult.OK ==result){ 3 FileStream fs = new FileStream(sfd.FileName, FileMode.Create); 4 var writer=new StreamWriter(fs,Encoding.GetEncoding("shift_jis")); 5 writer.writeline(comboBox1.Text + textBox1.Text); 6 fs.Close(); 7 } 8 sfd.Close();

動作確認はしていない。。

投稿2018/06/26 05:22

編集2018/06/26 05:33
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/06/26 05:55

って、テキストのファイル書き込みなら、System.IO.Fileにある、WriteAllLines やWriteAllText、それにAppendなんちゃら、を使うと手間無く簡単ですぜ。 #と、初心者に教えてしまっていいのだろうか
ty_m_c_t

2018/06/27 00:22

ご回答いただきありがとうございました。 指摘いただいたところ等見直し解決できました
guest

0

一部微調整したら、書き込めましたよ。

sfd.Filter = "(*.testF)|*.testF|" + "All files(*.*)|*.*";

ここはファイルの拡張子フィルタなので、

sfd.Filter = "*.txt|*.txt|" + "All files(*.*)|*.*";

に変えましょう。
他にもusing System.IO;が無かったりしましたので、
落ち着いて自分でサンプルプログラムを見直してみたらどうでしょう?

投稿2018/06/26 05:27

編集2018/06/26 05:54
Wind

総合スコア442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ty_m_c_t

2018/06/27 00:21

ご回答いただきありがとうございました。 サンプルプログラム等見直し解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問