カテゴリ: C# 更新日: 2025/12/13

C#のStreamReaderとStreamWriterを使ったテキストファイル操作

C#のStreamReaderとStreamWriterを使ったテキストファイル操作
C#のStreamReaderとStreamWriterを使ったテキストファイル操作

先生と生徒の会話形式で理解しよう

生徒

「先生、C#でファイルに文字を書き込んだり、読み取ったりする方法を知りたいです!」

先生

「良い質問ですね。C#では、StreamReaderStreamWriterというクラスを使って、テキストファイルの読み書きができますよ。」

生徒

「その2つはどう違うんですか?」

先生

「簡単に言えば、StreamWriterはファイルに書き込むためのクラス、StreamReaderはファイルを読むためのクラスです。それでは、実際の使い方を学んでみましょう!」

1. StreamReaderとStreamWriterとは?

1. StreamReaderとStreamWriterとは?
1. StreamReaderとStreamWriterとは?

StreamReaderStreamWriterは、C#でテキストファイルを操作するための基本的なクラスです。どちらもSystem.IOという名前空間に含まれています。

これらのクラスを使うことで、ファイルを開いて内容を読み取ったり、新しいテキストを書き込んだりすることができます。たとえば、日記やメモ帳アプリのように「文字を保存したい」場合に非常に便利です。

ファイル操作はパソコンの世界で「入出力(I/O:Input/Output)」と呼ばれます。ファイルから読み取るのが「入力(Input)」、書き込むのが「出力(Output)」です。

2. ファイルに書き込む:StreamWriterの使い方

2. ファイルに書き込む:StreamWriterの使い方
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の使い方

3. ファイルを読み込む:StreamReaderの使い方
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. ファイルの追記モードを使う

4. ファイルの追記モードを使う
4. ファイルの追記モードを使う

実際のアプリでは、既存のファイルに新しい情報を追加したい場合があります。たとえば、日記を毎日追記するようなケースです。そんなときは、StreamWriterのコンストラクタに「true」を指定して「追記モード(Append)」で開きます。


using (StreamWriter writer = new StreamWriter("sample.txt", true))
{
    writer.WriteLine("この行は追記された内容です。");
}

このように書くと、既存の内容を消さずに新しい行が追加されます。trueを指定しない場合は、古い内容が上書きされてしまうので注意しましょう。

5. ファイルの存在確認とエラー対策

5. ファイルの存在確認とエラー対策
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など)

6. 文字コードに注意しよう(UTF-8など)
6. 文字コードに注意しよう(UTF-8など)

ファイルの文字が「文字化け」する場合は、文字コード(エンコーディング)が原因のことがあります。日本語では「UTF-8」や「Shift-JIS」といった文字コードがよく使われます。

StreamWriterStreamReaderは、文字コードを指定して開くこともできます。


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());
}

このように明示的にエンコーディングを指定しておくと、異なる環境でも文字化けしにくくなります。

まとめ

まとめ
まとめ

StreamReaderとStreamWriterでできることの振り返り

この記事では、C#におけるテキストファイル操作の基本として、StreamReaderとStreamWriterの使い方を学んできました。 プログラミング初心者にとって、ファイル操作は少し難しく感じやすい分野ですが、仕組みを一つずつ理解すると決して特別なものではありません。 StreamWriterは「文字をファイルに書き込むための道具」、StreamReaderは「ファイルに書かれた文字を読み取るための道具」と考えると、とても分かりやすくなります。 実際のアプリケーションでは、設定ファイルを保存したり、ログを記録したり、ユーザーの入力内容を残したりと、テキストファイルの読み書きはさまざまな場面で活躍します。 そのため、StreamReaderとStreamWriterの基本を押さえておくことは、C#での開発を進める上で大きな土台になります。

書き込みと読み込みの流れを整理しよう

ファイル操作の流れとして大切なのは、「書き込む」と「読み込む」を明確に分けて考えることです。 まずStreamWriterを使ってファイルを開き、文字列を書き込み、処理が終わったら確実に閉じる。 次にStreamReaderを使って同じファイルを開き、内容を一行ずつ、またはまとめて読み取る。 using構文を使えば、ファイルを閉じ忘れる心配が減り、安全で安定したコードになります。 また、追記モードを使えば、既存の内容を残したまま新しい情報を追加できるため、日記や履歴管理のような処理にも応用できます。 これらの流れを頭の中で整理できるようになると、ファイル操作に対する不安は自然と小さくなっていきます。

サンプルとして覚えておきたい基本形


using System;
using System.IO;

class Program
{
    static void Main()
    {
        using (StreamWriter writer = new StreamWriter("memo.txt"))
        {
            writer.WriteLine("ファイル操作の基本を学びました。");
        }

        using (StreamReader reader = new StreamReader("memo.txt"))
        {
            Console.WriteLine(reader.ReadToEnd());
        }
    }
}

このような形は、C#でのテキストファイル操作の基本形として覚えておくと便利です。 最初は意味が分からなくても、何度か書いて動かしているうちに、「ここで書いて、ここで読んでいる」という流れが自然に理解できるようになります。 大切なのは、完璧に暗記することではなく、「見たら思い出せる状態」を作ることです。

実務や学習で役立つ考え方

ファイル操作では、ファイルが存在しない場合や、文字コードの違いによる問題など、実際に使ってみないと気づきにくいポイントもあります。 そのため、Fileクラスを使った存在確認や、文字コードを明示的に指定する書き方を知っておくことは、とても重要です。 エラーが出たときに慌てるのではなく、「なぜそうなったのか」を一つずつ確認する姿勢が、プログラミング上達への近道になります。 StreamReaderとStreamWriterは、その練習に最適な題材とも言えます。

先生と生徒の振り返り会話

生徒

「最初はファイル操作って難しそうだと思っていましたが、書く用と読む用で役割が分かれていると分かって、少し安心しました。」

先生

「そうですね。StreamWriterとStreamReaderは役割がはっきりしているので、基本を押さえれば応用もしやすいですよ。」

生徒

「usingを使えば、自分で閉じる処理を書かなくてもいいのも便利だと思いました。実際のアプリでも使えそうですね。」

先生

「その通りです。ファイル操作は実務でもよく使いますから、今回学んだ内容は今後何度も役に立ちますよ。」

生徒

「これからは、ログを書いたり設定を保存したりする処理にも挑戦してみたいです。」

先生

「良い目標ですね。今日学んだStreamReaderとStreamWriterを土台に、少しずつできることを増やしていきましょう。」

カテゴリの一覧へ
新着記事
New1
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New2
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New3
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
New4
COBOL
COBOLの帳票出力を完全攻略!数値項目のカンマ・小数点編集例を徹底解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法