【C#】ファイル入出力を使ったWPFアプリ
C#でファイル入出力を行うには StreamWriter または StreamReader クラスを使用します。クラスなのでインスタンス化してからインスタンスのメソッドを呼び出す形になります。例えば、ファイルを書き込むときには
StreamWriter streamWriter = new StreamWriter(filename, true, Encoding.UTF8);
streamWriter.WriteLine(text);
streamWriter.Close();
この三点セットです。上から順にインスタンス化、書き込み、ファイルのクローズです。インスタンス化では書き込みたいファイル名、追記するかどうかのbool値 (true:追記 false:上書き) 、エンコードを指定します。
書き込みでは改行付きの WriteLine( ) メソッドと 連結の Write( )メソッドがあります。ほかにもありますが、メタデータを確認していただけるとたくさん出てきます。引数には記述したい文字列が入ります。
ファイルクローズは名前通り、使ったファイルを閉じます。具体的にはC言語でいうファイルストリーム的な発想に近いです。ファイルポインタを参照してそのアクセス権をアプリで保持するので、解放されないとほかのアプリケーションで利用できなくなってしまいます。もちろん、同じアプリ内でも書き込み、読み込みメソッドなどが使えなくなります。必ずクローズしましょう。
ファイルを読み込むときは
StreamReader streamReader = new StreamReader(filename, Encoding.UTF8);
while (streamReader.EndOfStream == false)
{
string text = streamReader.ReadLine();
}
while文を使います。これは読み込むデータが行ごとになっているためです。ReadToEnd() メソッドを用いれば文章全体を読み込めるので、こちらを使ったほうがよかったですね。ただ、EndOfStream メソッドを使ってみたかったのもあります。これは文章が終わっているかどうかを返してくれるメソッドなので文章が終わればそこで終了となります。
StreamReader クラスも書き込みと同じような引数ですね。追記モードを選ぶ必要がないくらいです。あとは読み込んだデータを UI で見えるようにすればファイルを開かなくてもアプリ内で確認できます。
というわけで、今回もファイル入出力に関するアプリをつくってみました。すきに文章を打って、ファイル名を入力して作成をクリックするとファイルが生成されます。
ファイル名を指定して読み込みをクリックすれば記入したテキストが出力されます。
これでファイルの読み書きができました。追記すればそのあとに続いて書き込まれます。あ、ちなみにエラー処理がはしっかり作っています。前回の記事に書いたtry / catch に加えてファイル名が空になっていないかも判定させてます。なので、存在しないファイル名を読み込もうとすれば
ファイル名を空にすれば
存在しないのに追記しようとすれば
といった具合にいろいろはじいてくれます。
そんなわけで、今回作ったコードはこちらになります。ぜひ遊んでみてください。(自己責任でお願いします。)
余談ですが、ファイルのクローズは using を使うことでわざわざ記述する必要がなくなります。using で入出力クラスのインスタンス化を囲んで、その中に処理を書けばいいわけです。が、自分はわかりやすくするためにあえて書きました。注意点としては変数のスコープに気を付けたほうがいいです。using で囲めば、囲んだ中でしか利用できません。