【C#.NET解説】ファイル読み込み StreamReaderクラスの基本機能と効率的な読み取りを解説

2024年11月12日火曜日

ファイル操作

t f B! P L

名前空間 System.IO

StreamReader

自己紹介

おっと、私たちの助けが必要なようですね。
「StreamReader」は、テキストファイルの内容を簡単に取得するためのクラスです。
使い方は簡単。ファイルパスを渡して開き、内容を読み取るだけです。あなたの手を煩わせることなく、素早く、そして確実にファイルの中身を取得します。「StreamWriter」と共によく使われる双神の1柱です。

基本機能

「StreamReader」の基本的な用途は、テキストファイルを一行ずつ、または全体をまとめて読み取ることです。以下は、ファイルを1行ずつ読み取る基本例です。

C#

// ファイルを1行ずつ読み取る例
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.txt";

        using (StreamReader reader = new StreamReader(filePath))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                Console.WriteLine(line); // 取得した行を出力
            }
        }

        Console.WriteLine("読み取りが完了しました。");
    }
}

このコードでは、「ReadLine」メソッドを使って1行ずつ内容を取得しています。「using」構文でリソース解放も自動化しています。

よく使う場面と注意点

例えば、大量のログファイルを解析する場面や設定ファイルを読み込む際に使われます。ただし、注意点として以下のポイントを覚えておきましょう。

  • ファイルが存在しない場合、例外が発生する。
  • 読み取り専用のアクセスを保証する必要がある。

以下は、ファイルの存在を確認してから全体を一気に読み取る例です。

C#

// ファイルの存在確認と全体の読み取り
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.txt";

        if (File.Exists(filePath))
        {
            using (StreamReader reader = new StreamReader(filePath))
            {
                Console.WriteLine(reader.ReadToEnd()); // 全体を一気に取得
            }
        }
        else
        {
            Console.WriteLine("ファイルが存在しません。");
        }
    }
}

さまざまなメソッドの活用方法

StreamReaderには便利なメソッドが揃っています。

  • ReadLine: 行単位で読み取る
  • Read: 1文字ずつ読み取る
  • ReadToEnd: 全体を一気に読み取る

以下は「Read」を使って1文字ずつ読み取る例です。

C#

// 1文字ずつ読み取る例
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.txt";

        using (StreamReader reader = new StreamReader(filePath))
        {
            int character;
            while ((character = reader.Read()) != -1)
            {
                Console.Write((char)character); // 読み取った文字を出力
            }
        }
    }
}

非同期処理読み取り

StreamReaderは非同期処理にも対応しています。以下は「ReadToEndAsync」を使用して非同期にデータを読み取る例です。

C#

// 非同期でファイルを読み取る例
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string filePath = "example.txt";

        using (StreamReader reader = new StreamReader(filePath))
        {
            string content = await reader.ReadToEndAsync(); // 非同期で全体を取得
            Console.WriteLine(content);
        }
    }
}

エンコーディングを指定してShiftJISで読み込む

多言語環境ではエンコーディングの指定が重要です。以下は「Shift_JIS」を指定してファイルを読み込む例です。

C#

// Shift_JISでファイルを読み取る例
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string filePath = "example.txt";

        using (StreamReader reader = new StreamReader(filePath, Encoding.GetEncoding("Shift_JIS")))
        {
            Console.WriteLine(reader.ReadToEnd());
        }
    }
}

この方法で正しいエンコーディングを設定すれば、文字化けを防ぐことができます。

まとめ

「StreamReader」は、ファイル操作を効率化するための強力なツールです。便利なメソッドとオプションを組み合わせることで、さまざまな場面で役立ちます。ぜひ、日常の開発に取り入れてみてください。

このブログを検索

QooQ