[C#] テキストファイルの書き込み方法 [StreamWriter]

C#

この記事では、StreamWriterを使ったテキストファイルの書き込み方法を解説します。

この記事はこんな人におすすめ!
犬

C#でテキストファイルに書き込みたい!

猫

すでにあるファイルに書き足したい!

鳩

文字コードを指定して書き込みたい!

 

ファイル書き込みの基本気をつけるべき点を、サンプルとともにわかりやすく解説しています!

 

概要

C#でテキストファイルを書き込む際は、StreamWriterクラスを使います。

StreamWriterクラスは、ファイルにテキストを書き込むためのクラスです。
ファイルの内容を削除して上書きすることも、途中から追記することもできます。

なお、指定したパスにファイルが存在しなかった場合は、自動的に新規作成されます。

 

サンプル&詳細解説

上書きモードで書き込む

以下のサンプルでは、「C:\TEST\test.txt」に4行のテキストを上書きします。

「C:\TEST\test.txt」がすでに存在する場合は元の内容が削除されて新しい内容が上書きされてしまいますので、ご注意ください。

StreamWriterでは、指定したファイル(今回はtest.txt)が存在しない場合は自動的に新規作成しますが、親フォルダ(今回はC:\TEST)が存在しない場合は「DirectoryNotFoundException」の例外が発生します。サンプルをそのまま実行する場合は、あらかじめC:\TESTフォルダを作成してください。

サンプルコード

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string path = @"C:\TEST\test.txt";

            Console.WriteLine("書き込み開始");

            // ファイル書き込み 上書きモード UTF8
            using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))
            {
                sw.WriteLine("Dog");
                sw.WriteLine("Cat");
                sw.WriteLine("Monkey");
                sw.WriteLine("Bird");
            }

            Console.WriteLine("書き込み完了");
            Console.ReadKey();
        }
    }
}

実行結果

書き込み開始
書き込み完了

実行後のtest.txt

Dog
Cat
Monkey
Bird

正常に4行のテキストが書き込めました。

それでは、上記サンプルの重要箇所を解説していきます。

  • usingステートメント(12行目)
    usingステートメント内でStreamWriterを宣言しています。
    本来、StreamWriterは処理が終わったら必ずCloseメソッドDisposeメソッドでリソースを開放する必要がありますが、usingステートメントを使えばusingを抜ける際に自動的にリソースを開放してれます。
    usingを使えば、例外が発生した場合などにも自動的にリソースを開放してくれるので安全です
     
  • StreamWriter初期化(12行目)
    StreamWriterコンストラクタの第二引数は、書き込みモードを指定します。
    今回のようにfalseを指定すると、書き込みは上書きモードで行われます。
    また、第三引数では文字コードを指定できます。
     
  • 上書きモードでファイル書き込み(14-17行目)
    計4行の文字列を書き込んでいます。
    WriteLineメソッドでは、書き込んだ文字列のあとに改行コードが追加されます。
     

追加モードで書き込む

以下のサンプルでは、すでに存在する「C:\TEST\test.txt」にテキストを追加しています。
text.txtには、上書きモードのサンプルで書き込んだ4行があらかじめ書き込まれています。

実行前のtest.txt

Dog
Cat
Monkey
Bird

サンプルコード

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string path = @"C:\TEST\test.txt";

            Console.WriteLine("書き込み開始");

            // ファイル書き込み 追記モード UTF8
            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
            {
                sw.WriteLine("Bear");
            }

            Console.WriteLine("書き込み完了");
            Console.ReadKey();
        }
    }
}

実行結果

書き込み開始
書き込み完了

実行後のtest.txt

Dog
Cat
Monkey
Bird
Bear

末尾に1行が追加されました。

上書きモードとの違いは、12行目のStreamWriter初期化時の第二引数がtrueになっている点です。
trueを指定した場合は追加モードとなり、既存の内容は削除せず新しいテキストが末尾に追加されます。

 

文字列をまとめて書き込み

ここまでのサンプルでは、文字列を1行単位で書き込んできました。
次のサンプルでは、あらかじめ改行した文字列をまとめて書き込んでいます。

サンプルコード

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string path = @"C:\TEST\test.txt";

            // ファイルに書き込む文字列を作成
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Dog");
            sb.AppendLine("Cat");
            sb.AppendLine("Monkey");
            sb.AppendLine("Bird");

            Console.WriteLine("書き込み開始");

            // ファイル書き込み 上書きモード UTF8
            using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))
            {
                sw.Write(sb.ToString());
            }

            Console.WriteLine("書き込み完了");
            Console.ReadKey();
        }
    }
}

実行結果

書き込み開始
書き込み完了

実行後のtest.txt

Dog
Cat
Monkey
Bird

4行の文字列が書き込まれました。

WriteLineメソッドは自動的に末尾に改行コードを追加しますが、Writeメソッドは改行は追加せず、渡した文字列をそのまま書き込みます。

 

まとめ

以下は当記事のまとめです!

  • C#でテキストファイルを書き込む際はStreamWriterクラスを使用する。
  • 初期化時の引数で上書きモード追加モードかを選択する。
  • 初期化時の引数で文字エンコードを指定する。
  • 1行ずつ書くときはWriteLineメソッドを、末尾の改行コードが不要ならWriteメソッドを使う。
  • usingステートメントを使うとリソースが自動的に開放される。

 

以上です!

今回紹介しましたサンプルを元に、ファイル書き込みを色々試してみてください!押忍!

コメント

タイトルとURLをコピーしました