hakeの日記

Windows環境でプログラミングの勉強をしています。

C# - テキストファイルのアクセス

テキストファイルに対して1行単位で読み書きする例。
エンコード文字コード)は環境のデフォルトのものを取得して設定している。設定を省略した場合はutf-8となる。特定のエンコードを指定する場合は、GetEncodingメソッドを使用する。
通常はusingを使用してストリームを生成する。そうすることでusingブロックを出たときのストリームのクローズ処理が自動で行われるようになる。

using System;
using System.IO;
using System.Text;

//テキストファイルのアクセス

class MyMain
{
    static void Main(string[] args)
    {
        string ifile = "input.txt";
        string ofile = "output.txt";
        string path  = @"C:\test\";

        //環境のデフォルトエンコード(Shift_JIS)を取得
        var enc = Encoding.Default;
        //エンコードを指定する場合
        //var enc = Encoding.GetEncoding("shift_jis");

        string[] buf = new string[10];
        int i = 0;


        //ファイルから1行ずつ読み込み
        var reader = new StreamReader(path + ifile, enc);
        while( !reader.EndOfStream && i < 10)
        {
            buf[i++] = reader.ReadLine();
        }
        //readerのクローズ
        reader.Close();



        i = 0;
        //ファイルへ1行ずつ書き出し
        //第2引数trueは、追加書き込みモード
        //usingを使用することでブロック脱出時に
        //writerのクローズ(オブジェクトの破棄)が保証される
        using( var writer = new StreamWriter(path + ofile, true, enc) )
        {
            while(buf[i] != null)
            {
                Console.WriteLine(buf[i]);
                writer.WriteLine(buf[i++]);
            }
        }

    }
}