ヘッダー
C# サンプル集
 

ファイルから文字列を読み込む

2021/10/10

→ Visual Basic のサンプルに切り替える

 

ファイル全体を一度に読み込む

この例ではUTF-8 として読み込みます。


string content = System.IO.File.ReadAllText(@"C:\temp\test.txt");

メモ:ファイルに複数行が含まれる場合は、改行付きの1つの文字列として読み込みます。

 

これでもできます。この例は C# 8.0(2019年9月)以降で実行できます。

using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");
string content = reader.ReadToEnd();

これを C# 8.0より前でも実行できるように書き換えると次のようになります。

using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
    string content = reader.ReadToEnd();
}

 

 

shift_jisとして読み込む

この例ではShift_JIS としてファイル全体を読み込みます。

#if NETCOREAPP
//.NET Frameworkで実行している場合、この#if ~ #endif 間は無視されます。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif

var sjis = System.Text.Encoding.GetEncoding("shift_jis");
string content = System.IO.File.ReadAllText(@"C:\temp\test.txt",sjis);

メモ:ファイルに複数行が含まれる場合は、改行を含む1つの文字列として読み込みます。

 

これでもできます。この例は C# 8.0(2019年9月)以降で実行できます。

#if NETCOREAPP
//.NET Frameworkで実行している場合、この#if ~ #endif 間は無視されます。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif

var sjis = System.Text.Encoding.GetEncoding("shift_jis");
using var reader = new System.IO.StreamReader(@"C:\temp\test.txt", sjis);
string content = reader.ReadToEnd();

メモ:ファイルに複数行が含まれる場合は、改行を含む1つの文字列として読み込みます。

これを C# 8.0より前でも実行できるように書き換えると次のようになります。

#if NETCOREAPP
//.NET Frameworkで実行している場合、この#if ~ #endif 間は無視されます。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif

var sjis = System.Text.Encoding.GetEncoding("shift_jis");
using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt", sjis))
{
    string content = reader.ReadToEnd();
}

メモ:ファイルに複数行が含まれる場合は、改行を含む1つの文字列として読み込みます。

 

 

ファイル全体を一度に読み込んで、行ごとに取得する

この例ではUTF-8 として読み込みます。

string[] lines = System.IO.File.ReadAllLines(@"C:\temp\test.txt");

//以下はファイルに2行以上ないとエラーになります。
System.Diagnostics.Debug.WriteLine($"{lines.Length}行ありました。");
System.Diagnostics.Debug.WriteLine("1行目は:" + lines[0]);
System.Diagnostics.Debug.WriteLine("2行目は:" + lines[1]);
System.Diagnostics.Debug.WriteLine("最後の行は:" + lines.Last());

Debug.WriteLineが表示される場所

 

 

1行ずつ3行目まで読み込む

この例ではUTF-8 として読み込みます。この例は C# 8.0(2019年9月)以降で実行できます。

using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");

string? line1 = reader.ReadLine(); //1行目を読み込みます。
string? line2 = reader.ReadLine(); //次の行を読み込みます。
string? line3 = reader.ReadLine(); //次の行を読み込みます。

メモ:最終行を読み込んだ後 ReadLine を呼び出すと null を返します。

これを C# 8.0より前で実行できるように書き換えると次のようになります。

using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
    string line1 = reader.ReadLine(); //1行目を読み込みます。
    string line2 = reader.ReadLine(); //次の行を読み込みます。
    string line3 = reader.ReadLine(); //次の行を読み込みます。
}

メモ:最終行を読み込んだ後 ReadLine を呼び出すと null を返します。

 

 

1行ずつ最後まで読み込む

この例ではUTF-8 として読み込みます。この例は C# 8.0(2019年9月)以降で実行できます。

using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");

while (!reader.EndOfStream)
{
    string line = reader.ReadLine()!;
    System.Diagnostics.Debug.WriteLine(line);
}

Debug.WriteLineが表示される場所

これを C# 8.0より前で実行できるように書き換えると次のようになります。

using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
    while (!reader.EndOfStream)
    {
        string line = reader.ReadLine();
        System.Diagnostics.Debug.WriteLine(line);
    }   
}

Debug.WriteLineが表示される場所

 

 

1文字ずつ読み込む

次の例は、ファイルから1文字ずつ取得して、その文字をデバッグ出力に書き込みます。この例ではUTF-8 として読み込みます。この例は C# 8.0(2019年9月)以降で実行できます。

using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");

while (!reader.EndOfStream)
{
    int code = reader.Read();
    char letter = Convert.ToChar(code);
    string st = letter.ToString();
    System.Diagnostics.Debug.WriteLine(st);
}

Debug.WriteLineが表示される場所

メモ:ここでいう「文字」とはUnicode基本多言語面のコードポイントを指しているようで、たとえば、UTF-16でサロゲートペアとして表される1文字(例として𩸽)はこのプログラムでは判別できない2つの文字として出力されるようです。

これを C# 8.0より前で実行できるように書き換えると次のようになります。

using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
    while (!reader.EndOfStream)
    {
        int code = reader.Read();
        char letter = Convert.ToChar(code);
        string st = letter.ToString();
        System.Diagnostics.Debug.WriteLine(st);
    }
}

Debug.WriteLineが表示される場所

メモ:ここでいう「文字」とはUnicode基本多言語面のコードポイントを指しているようで、たとえば、UTF-16でサロゲートペアとして表される1文字(例として𩸽)はこのプログラムでは判別できない2つの文字として出力されるようです。