文字列の中にファイルの内容に相当する文字列が既にあるとします。
ファイルを扱うメソッドで文字列も読み込ませたいとします。
できるでしょうか?
できます。
それには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!]