C#のStreamReaderとStreamWriterを使ったテキストファイル操作
生徒
「先生、C#でファイルに文字を書き込んだり、読み取ったりする方法を知りたいです!」
先生
「良い質問ですね。C#では、StreamReaderとStreamWriterというクラスを使って、テキストファイルの読み書きができますよ。」
生徒
「その2つはどう違うんですか?」
先生
「簡単に言えば、StreamWriterはファイルに書き込むためのクラス、StreamReaderはファイルを読むためのクラスです。それでは、実際の使い方を学んでみましょう!」
1. StreamReaderとStreamWriterとは?
StreamReaderとStreamWriterは、C#でテキストファイルを操作するための基本的なクラスです。どちらもSystem.IOという名前空間に含まれています。
これらのクラスを使うことで、ファイルを開いて内容を読み取ったり、新しいテキストを書き込んだりすることができます。たとえば、日記やメモ帳アプリのように「文字を保存したい」場合に非常に便利です。
ファイル操作はパソコンの世界で「入出力(I/O:Input/Output)」と呼ばれます。ファイルから読み取るのが「入力(Input)」、書き込むのが「出力(Output)」です。
2. ファイルに書き込む:StreamWriterの使い方
まずは、StreamWriterを使ってテキストファイルに文字を書き込む方法を見てみましょう。
using System;
using System.IO;
class Program
{
static void Main()
{
// ファイルに書き込む
using (StreamWriter writer = new StreamWriter("sample.txt"))
{
writer.WriteLine("こんにちは、C#の世界へようこそ!");
writer.WriteLine("StreamWriterを使うと、簡単にファイルに文字を書けます。");
}
Console.WriteLine("ファイルへの書き込みが完了しました。");
}
}
このプログラムを実行すると、同じフォルダ内に「sample.txt」というファイルが作成され、指定した文字列が書き込まれます。
ポイント:usingを使うことで、ファイルを自動的に閉じてくれるため、メモリの無駄やファイルロックの問題を防げます。
ファイルへの書き込みが完了しました。
ファイルの中身を開いてみると、次のようになっています。
こんにちは、C#の世界へようこそ!
StreamWriterを使うと、簡単にファイルに文字を書けます。
3. ファイルを読み込む:StreamReaderの使い方
次に、StreamReaderを使ってファイルの内容を読み取る方法を学びましょう。
using System;
using System.IO;
class Program
{
static void Main()
{
// ファイルを読み取る
using (StreamReader reader = new StreamReader("sample.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
ReadLine()メソッドは、ファイルを1行ずつ読み取る命令です。ファイルの終わりに達するとnull(何もない状態)を返すので、while文で最後まで読み取ることができます。
こんにちは、C#の世界へようこそ!
StreamWriterを使うと、簡単にファイルに文字を書けます。
このようにして、先ほど書き込んだ内容をコンソールに表示できます。つまり、StreamWriterで書き込み、StreamReaderで読み取るという流れになります。
4. ファイルの追記モードを使う
実際のアプリでは、既存のファイルに新しい情報を追加したい場合があります。たとえば、日記を毎日追記するようなケースです。そんなときは、StreamWriterのコンストラクタに「true」を指定して「追記モード(Append)」で開きます。
using (StreamWriter writer = new StreamWriter("sample.txt", true))
{
writer.WriteLine("この行は追記された内容です。");
}
このように書くと、既存の内容を消さずに新しい行が追加されます。trueを指定しない場合は、古い内容が上書きされてしまうので注意しましょう。
5. ファイルの存在確認とエラー対策
ファイル操作を行う際、対象のファイルが存在しないとエラー(例外)が発生します。そのため、File.Exists()メソッドを使って、ファイルが存在するかを確認してから読み込むようにするのが安全です。
if (File.Exists("sample.txt"))
{
using (StreamReader reader = new StreamReader("sample.txt"))
{
Console.WriteLine(reader.ReadToEnd());
}
}
else
{
Console.WriteLine("ファイルが見つかりません。");
}
ReadToEnd()メソッドを使うと、ファイル全体をまとめて読み取ることができます。短いテキストを一気に読みたいときに便利です。
6. 文字コードに注意しよう(UTF-8など)
ファイルの文字が「文字化け」する場合は、文字コード(エンコーディング)が原因のことがあります。日本語では「UTF-8」や「Shift-JIS」といった文字コードがよく使われます。
StreamWriterやStreamReaderは、文字コードを指定して開くこともできます。
using (StreamWriter writer = new StreamWriter("utf8.txt", false, System.Text.Encoding.UTF8))
{
writer.WriteLine("UTF-8で書き込みました。");
}
using (StreamReader reader = new StreamReader("utf8.txt", System.Text.Encoding.UTF8))
{
Console.WriteLine(reader.ReadToEnd());
}
このように明示的にエンコーディングを指定しておくと、異なる環境でも文字化けしにくくなります。