C#ファイルストリームマスター:StreamReader & StreamWriterステップバイステップガイド
C#ファイルI/Oにおいて、ストリームはアプリケーションと基盤となるファイルシステムの間の仲介役として機能します。特に大規模データセットを扱う際、メモリ効率よくファイルから読み取り、またはファイルへ書き込みを行うことを可能にします。
100 MBのファイル全体をメモリにロードする代わりに(アプリのフリーズやクラッシュの原因になります)、ストリームはデータを管理しやすいチャンクに分割します。このアプローチによりパフォーマンスをスムーズに保ち、クラッシュを防止します。
以下にStreamReaderとStreamWriterを使用したファイル読み書きの簡潔な例をステップバイステップで示します。これらのパターンを独自のプロジェクトに統合する手順に従ってください。
StreamReader - ファイル読み取り
StreamReaderクラスはファイルからテキストを1行ずつ読み取り、アプリケーションが処理する前にデータをバッファを通じて渡します。
DドライブにExample.txtというファイルがあり、以下の2行が含まれていると仮定:
- Guru99 - .Net
- Guru99 - C#
コンソールアプリケーションを作成し、Program.csに以下のコードを追加:

using System;
using System.IO;
namespace DemoApplication {
class Tutorial {
static void Main(string[] args) {
string path = @"D:\Example.txt";
using (StreamReader sr = File.OpenText(path)) {
string line;
while ((line = sr.ReadLine()) != null) {
Console.WriteLine(line);
}
}
Console.ReadKey();
}
}
}
解説:
File.OpenTextでStreamReaderをインスタンス化、ファイルを読み取り専用モードでオープン。ReadLine()で各行を読み取り、ファイルからバッファ、バッファからline変数へデータを転送。- 各行をコンソールに出力。
Visual Studioでこのプログラムを実行すると:

Example.txtの2行が正しく表示され、リーダーが意図通り動作することが証明されます。
StreamWriter - ファイル書き込み
逆に、StreamWriterはアプリケーションからファイルへテキストをバッファ経由で書き込みます。以下は同じExample.txtファイルに1行追記するシンプルな例です。

using System;
using System.IO;
namespace DemoApplication {
class Tutorial {
static void Main(string[] args) {
string path = @"D:\Example.txt";
using (StreamWriter sw = File.AppendText(path)) {
sw.WriteLine("Guru99 - ASP.Net");
}
Console.WriteLine(File.ReadAllText(path));
Console.ReadKey();
}
}
}
解説:
File.AppendTextでStreamWriterをインスタンス化、ファイルを追記モードでオープン。WriteLine()で新しい行を書き込み、テキストをバッファ、バッファからファイルへプッシュ。usingブロックでライターを自動的にクローズ。File.ReadAllTextでファイル全体を読み取り、書き込み操作を確認。
プログラム実行結果:

コンソールに3行すべてが表示され、新しいエントリが正常に追記されたことを確認できます。
重要なポイント
- ストリームはファイルI/Oをアプリケーションロジックから分離し、大容量ファイルの効率的な処理を可能にする。
- テキストを行単位で読み取るには
StreamReaderを使用。 - テキストの書き込み・追記には
StreamWriterを使用、ストリームを確実にクローズしてファイルハンドルを解放。
C言語
- C++ for文を徹底解説:構文、実行フロー、実践例
- C++ switch文をマスター:構文、使い方、実践例
- C++動的配列の確保をマスター:コード例付き実践ガイド
- C++ストリームをマスター:cout、cin、cerr、clogの実践ガイド
- C++ std::stack完全ガイド:実践例付きでLIFOコンテナをマスター
- C++構造体を実例で徹底解説
- C++クラスとオブジェクト:コード例付き実践ガイド
- C++のstd::listをマスターする:構文、関数、実践例
- C#抽象クラス実践チュートリアル:コード例で理解する設計パターン
- C#コレクション実践チュートリアル:実例で学ぶ柔軟なデータ管理
- Java BufferedReader でファイル読み込み:実践ガイドと例