2020年11月17日
川俣晶の縁側ソフトウェアC# コーディング How To total 840 count

【入門級】ファイルを扱うメソッドで文字列も読み込ませたい!

Written By: 川俣 晶連絡先

 文字列の中にファイルの内容に相当する文字列が既にあるとします。

 ファイルを扱うメソッドで文字列も読み込ませたいとします。

 できるでしょうか?

 できます。

 それにはStringReaderクラスを使います。

 これを使えば、文字列に対するリーダーを作成できます。

 リーダーの扱い方はファイルのリーダーとほぼ同じです。

罠の数々 §

  • ファイルから読み出す際は予期せぬ例外が起きる可能性が常にあるから、usingメソッドで全体を囲って確実にファイルを閉じておく価値がある。しかし、文字列からの読み出しだと意図せぬ例外が起きる可能性がほとんどない。サンプルソースではusingメソッドを使っていないことに注意しよう。

参考リンク §

StreamReader クラス

StringReader クラス

TextReader クラス

 汎用の読み出しメソッドはリーダーをTextReader で受けていることに注意しよう。なぜこのクラスなのか、上記のリンクから辿って理由を調べてみよう。なお、StreamReader クラスはreader1の型である。

リポジトリ §

https://github.com/autumn009/cshowto

StringReader §

using System;

using System.IO;

class Program

{

    private static void fileReaderSub(TextReader reader)

    {

        for (; ; )

        {

            var s = reader.ReadLine();

            if (s == null) break;

            Console.WriteLine($"[{s}]");

        }

    }

    static void Main()

    {

        string src = "Hello!\nMy Friends!\nWelcome!";

        File.WriteAllText("sample.txt", src);

        // ファイルから読み出す

        using(var reader1 = File.OpenText("sample.txt"))

        {

            fileReaderSub(reader1);

        }

        // 文字列から読み出す

        var reader2 = new StringReader(src);

        fileReaderSub(reader2);

    }

}

実行結果

[Hello!]

[My Friends!]

[Welcome!]

[Hello!]

[My Friends!]

[Welcome!]

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?