.NET C# でテキストファイルをいじろう
C#がなかなかできないなれんじですが、最近DiscordBotの開発にはまってしまっています。
VisualStudio2017 のフォームアプリケーションでC#を使ってテキストファイルを読み書きするプログラムを
解説していきたいと思います。
FormApplicationのデザインに関してはコードから自分で作成してください。
使用したusing句はこちらです
using System; using System.Text; using System.IO; using System.Windows.Forms;
目次
テキストファイル名の読み込みに関して
string[] files1 = System.IO.Directory.GetFiles(@"ディレクトリ", "ファイル名", System.IO.SearchOption.AllDirectories);
string[] files1 でstring型の配列を宣言し、次の文で初期化します。
System.IO.Directory.GetFiles(@”ディレクトリ”, “拡張子”, System.IO.SearchOption.AllDirectories);
@”ディレクトリ”のように「@」を””の前に記述することによって「¥」、すなわち「\」を””の中に記述できるようにします。これをすることによってテキストファイルのあるディレクトリを格納することができます。
“拡張子”には、”.txt”のようにファイル名を記述します。.txtと書くとtxtという拡張子を持つファイルをすべてあてはまるように指定できます。このように記述すれば指定したディレクトリにあるフォルダ内の.txtのファイル名をすべて配列に格納することができます。
そしてこのままだとファイル名にディレクトリの文字列も含まれてしまうので、
foreach (string i in files1) { files1[Array.IndexOf(files1, i)] = i.Replace(@"ディレクトリ", ""); }
と記述します。
foreach文でfiles1に含まれている要素分繰り返します。そして
string i in files1 で順番にiという変数にfiles1の要素を上書きしていきます。
files1[Array.IndexOf(files1, i)] で、Array.IndexOf(files1, i)というプログラムがでてきましたが、これはfiles1の要素の中でiという要素を検索し、何番目(0番目からスタート)に存在するかを返すものです。
i.Replace(@”ディレクトリ”, “”); で、i変数にはfiles1の要素の1つである文字列が入っているので、この文字列を置き換えるものです。第一引数に置き換えられる文字列を、第二引数に置き換わった後の文字列を、要するに””にすれば指定した文字列が消えるのです。
以上の文でfiles1に含まれている要素からディレクトリの文字列を消すことができました。
拡張子も残っているのでさらに文を書けば消えます。
これでfiles1配列には指定したフォルダ内の指定したファイルのファイル名が入りました。
テキストファイルの内容を取り出そう
StreamReader sr = new StreamReader(truedel, Encoding.GetEncoding("SHIFT_JIS"));
StreamRender()について、
第一引数(この場合truedel変数)には内容を取り出すファイルのディレクトリをString型で記述
Encoding.GetEncoding(“SHIFT_JIS”)でSHIFT_JISという文字コードで取り出しますということです。
これで取り出すことができました。
また、1行ずつ読み込む場合、
while (sr.EndOfStream == false) { string line = sr.ReadLine(); textBox1.Text += line + "\r\n"; } sr.Close();
など、StremとReadLineを使用するとよいでしょう。
テキストファイルの上書き等でアラートを表示させたいとき
DialogResult result = MessageBox.Show( "上書きしますか?","上書き保存",MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button2); if (result == DialogResult.Yes) { //Yesのときの処理 }
このように記述すればアラートが簡単に作成できます。
新しいテキストファイルの作成
string pass; //作成するファイルのディレクトリ(例:"C:\Users\owner\test.txt") string naiyou = "テキストファイルの内容"; System.IO.StreamWriter tx = new System.IO.StreamWriter(pass, true,System.Text.Encoding.GetEncoding("Shift_Jis")); tx.WriteLine(naiyou.Text); tx.Close;
pass変数には、ディレクトリを記述しますが、別途テキストボックス等を作成して、” ” + ” ” などでファイル名をGUIで決定できるようにするとよいでしょう。
System.IO.StreamWriter(pass, true,System.Text.Encoding.GetEncoding(“Shift_Jis”));
の第一引数で作成するディレクトリを指定します。そして先ほどと同様にSHIFT_JISで文字コードを決定しています。
tx.WriteLine(naiyou.Text);
でnaiyou.Textを書き込み、テキストファイルを作成しています。
tx.Close(); でストリームを閉じます。
こんなかんじでC#を使ってテキストファイルをいじったりできるようになりました。
私はこれを利用してDiscordのBotがテキストファイルを読み込んでチャットに表示できるようにしました。
間違ったプログラム等があったら言ってください。まだまだ初心者なので、、
では。