C# - ファイルの読み込み

ファイルを読み込むには StreamReaderクラス や File クラスを使用します。1行ごとの読み込み、一括で読み込む方法を解説します。

ファイルを1行ずつ読み取る(StreamReader + ReadLine)

サイズの大きいファイルを読み込む場合は StreamReaderクラス と ReadLineメソッド を使用し、1行ごとに読み込みます。ReadLine()メソッドは改行コードを取り除いた結果を返します。
using System.IO;
using System.Text;

// ファイルをオープン(エンコード=UTF-8)
using (StreamReader sr = new StreamReader("./utf8.txt", Encoding.UTF8))
{
    // ファイル終端までループ
    while (sr.Peek() > -1)
    {
        // 一行読み込む
        string lineText = sr.ReadLine();

        // 結果を表示
        System.Console.Write(lineText);
    }
}

ファイルを1行ずつ読み取る(File.ReadLines)

サイズの小さなファイルを読み取るときは File.ReadLines() メソッドを使用します。ファイルをすべて読み取ってから結果を返すため、大きなファイルの場合は時間がかかったり、メモリーの消費量が大きくなります。結果から改行コードは取り除かれます。
using System.Collections.Generic;
using System.IO;
using System.Text;

// ファイルを読み込む
IEnumerable<string> lines = File.ReadLines("./utf8.txt", Encoding.UTF8);

// 最終行までループ
foreach (string line in lines)
{
    // 結果を表示
    System.Console.Write(line);
}

改行で分割せずにファイルを読み取る(File.ReadAllText)

ファイルの内容を丸ごと読み取るには File.ReadAllText() メソッドを使用します。結果は改行コードを含んだ文字列で返されます。
using System.IO;
using System.Text;

// 一度に読み込み
string text = File.ReadAllText("./utf8.txt", Encoding.UTF8);

// 結果を表示
System.Console.Write(text);

改行で分割せずにファイルを読み取る(StreamReader + ReadToEnd)

StreamReaderクラスとReadToEnd()メソッドを使用しても File.ReadAllText()メソッド と同じ結果を得られます。返す値は改行コードを含んだ文字列です。
using System.IO;
using System.Text;

// ファイルをオープン(エンコード=UTF-8)
using (StreamReader sr = new StreamReader("./utf8.txt", Encoding.UTF8))
{
    // 一度に読み込み
    string text = sr.ReadToEnd();

    // 結果を表示
    System.Console.Write(text);
}

Shift-Jis ファイルの読み込み

ターゲットフレームワークが「.Net Core 1.0 ~ .Net Core 3.1」と「.NET 5 ~ 」の場合、エンコード(文字コード)に Shift_JIS を指定すると例外が発生します。 解決するには エンコーディングプロバイダー登録 を行います。

詳細は次の記事を参照してください。

Shift-Jis ファイルを読み込むサンプルコード
using System.IO;
using System.Text;

// コードページ エンコーディング プロバイダーを登録
// (※.NET Core と .NET5 ~ の場合に必要。.NET Frameworkの場合は不要)
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

// ファイルをオープン(エンコード=Shift-JIS)
using (StreamReader sr = new StreamReader("./sjis.txt", Encoding.GetEncoding("Shift_JIS")))
{
    // 一度に読み込み
    string text = sr.ReadToEnd();

    // 結果を表示
    System.Console.Write(text);
}

サンプルコードの実行結果

サンプルコードで使用したファイル - Visual Studio Code
サンプルコードで使用したファイル - Visual Studio Code
StreamReader + ReadLineの実行結果
StreamReader + ReadLineの実行結果
File.ReadLinesの実行結果
File.ReadLinesの実行結果
File.ReadAllTextの実行結果
File.ReadAllTextの実行結果
StreamReader + ReadToEndの実行結果
StreamReader + ReadToEndの実行結果

検証環境