C#

【C#】ファイルに書き込む方法を紹介(StreamWriter)

C#で文字列を記入してファイルを出力する方法を紹介します。

アプリケーションを開発していると、ファイルにデータを保存したいて事が多々あります。ファイルに保存することで、ディスク上に保存されるので消える事がなく、コピーや再編集が可能だからです。

この記事ではファイルに書き込む方法を2種類(Write・WriteLine)紹介していますので、ぜひ最後まで読んでみてください。

またファイルの読み取りもしたい方は、以下のサイトでファイルの読み込み方法を紹介していますので参考にしてみてください。

【C#】ファイルを読み込む方法を紹介(StreamReader)C#にはファイル読み込みする専用クラス「StreamReader」が存在します。このクラスには全て取得するReadToEndメソッドや1行だけ取得するReadLineメソッドがあります。この2つのメソッドの利用方法を紹介していますので、ぜひ最後まで読んでみてください。...

 

プログラミングを更に学びたい方必見

選抜された現役エンジニアから学べるプログラミングスクールで、現場や副業で役に立つノウハウやスキルを習得してみませんか?

オンラインに特化しているので場所に捉われず、自分のライフスタイルに合わせて受講することができます。

副業に興味がある方に人気の「はじめての副業コース」をはじめ、Web開発やシステム開発・アプリ開発などカテゴリ毎に受講ができ、初心者の方でも挫折することなく学ぶことができます。

まずはこの機会に現役のプロに無料相談をしてみましょう。

\ プログラミングスクールの詳細を確認する /

ファイルへ書き込むには?

C#でファイルに書き込みをする場合は、「StreamWriterクラス」を使うのが一般的です。ファイルの書き込み専用のクラスで、ファイルにテキストを書き込む Writeメソッド や WriteLineメソッド が用意されています。

メソッド名説明
Writeストリームに文字列、文字配列、文字などを書き込みます。
WriteAsync非同期でストリームに文字列、文字配列、文字などを書き込みます。
WriteLineストリームに1行だけ文字列と改行を書き込みます。
WriteLineAsync非同期でストリームに1行だけ文字列と改行を書き込みます。

※ストリームは「データの流れ」を意味し、ストリームにテキストを渡すとファイルへ書き込まれる。

StreamWriter はファイル名を指定します。このファイル名の拡張子は自由に設定が可能ですので、テキストファイル(.txt)やCSVファイル(.csv)、ログファイル(.log)へテキストを書き込めるという特徴があります。

指定したファイル名がない場合はファイルが新規作成され、指定したファイル名がある場合は既存ファイルに上書きして保存したり、既存ファイルの最後の行に追記することが可能です。

ファイルの書き込む方法

ここからはファイルにテキストを書き込む方法を紹介します。

まずはStreamWriterを利用できるように、csファイルのヘッダー部分に名前空間「System.IO」を設定しましょう。

using System.IO;

ファイルにテキストを書き込むには、3つの処理を順番に行うのが基本です。

StreamWriterクラスのコンストラクタの引数にファイルパス、上書き保存する又はファイルの末尾に追加する、エンコードの指定を行います。

よく使うコンストラクタ

StreamWriter(ファイルパス, 上書き保存 or 末尾に追加, エンコード)

第1引数はstring型で、ファイル名もしくはファイルの絶対パスを指定します。

第2引数はbool型で、「true」または「false」を指定します。「true」の場合は、既存ファイルのテキストを残したまま、末尾にテキストを追加します。「false」の場合は、既存ファイルのテキストは全て削除され、新しくテキストが上書きされます。

第3引数は必ずしも必要ではありません。文字のエンコードを指定しない場合は、デフォルト値(UTF-8)を使用してファイルへテキストを書き込みます。

エンコードにはいくつかの種類があり、C#でエンコードを指定する例を挙げておきます。

エンコードの種類エンコードの指定
日本語 Shift-JISEncoding.GetEncoding(“shift_jis”)
日本語 EUCEncoding.GetEncoding(“euc-jp”)
日本語 JISEncoding.GetEncoding(“iso-2022-jp”)
UnicodeEncoding.Unicode
UTF8Encoding.UTF-8
UTF-32Encoding.UTF32

 

Write メソッド

StreamWriterクラスのWriteメソッドで、既存ファイルに新しくテキストを上書きする方法です。既存ファイルがない場合はファイルを新規作成します。

private void WriteFile()
{
    //ファイル名
    var fileName = "sample.txt";
    //var fileName = @"C:\sample.txt";  絶対パスでも良い

    //書き込むテキスト
    var days = new string[] { "月曜日", "火曜日", "水曜日", "木曜日", "金曜日" };

    try
    {
        //ファイルをオープンする
        using (StreamWriter sw = new StreamWriter(fileName, false, Encoding.GetEncoding("Shift_JIS")))
        {
            foreach (var day in days)
            {
                //テキストを書き込む
                sw.Write(day);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

上記のソースコードを実行すると次の結果になります。Writeメソッドは改行せずにテキストを続けて記述することができます。

StreamWriterクラスのコンストラクタの第2引数が false なので、何度実行しても上書き保存されて上図の結果になります。

この第2引数を true にすると、ファイルの末尾にテキストが追加されます。

using (StreamWriter sw = new StreamWriter(fileName, true, Encoding.GetEncoding("Shift_JIS")))

StreamWriterクラスを使用した後はCloseメソッドでストリームを閉じます。この時、Closeメソッドを呼び出すことを忘れてしまうとリソースが解放されません。

StreamWriterでファイルをオープンしたら、Closeメソッドを呼び出してストリームを閉じます。
Closeメソッドを呼び出すことで、関連付けられた全てのリソースが解放されます。

Usingステートメントを使うことで、Closeメソッドを実装しなくても自動で解放処理を行ってくれます。

WriteAsync メソッド

非同期でファイルにテキストを書き込む方法です。

ファイルに大量の文字を書く場合に発生するデッドロックを防止することができます。

private async Task WriteFileAsync()
{
    //ファイル名
    var fileName = "sample.txt";
    //var fileName = @"C:\sample.txt";  絶対パスでも良い

    //書き込むテキスト
    var days = new string[] { "月曜日", "火曜日", "水曜日", "木曜日", "金曜日" };

    try
    {
        //ファイルをオープンする
        using (StreamWriter sw = new StreamWriter(fileName, false, Encoding.GetEncoding("Shift_JIS")))
        {
            foreach (var day in days)
            {
                //テキストを書き込む
                await sw.WriteAsync(day);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

WriteメソッドをWriteAsyncメソッドに変更し、非同期のお約束事である「async / await」を付けます。

上記のソースコードを実行すると次の結果になります。Writeメソッドと同じで改行せずにテキストを続けて記述します

 

WriteLine メソッド

StreamWriterクラスのWriteLineメソッドで、既存ファイルに新しくテキストを上書きする方法です。既存ファイルがない場合はファイルを新規作成します。

private void WriteLineFile()
{
    //ファイル名
    var fileName = "sample.txt";
    //var fileName = @"C:\sample.txt";  絶対パスでも良い

    //書き込むテキスト
    var days = new string[] { "月曜日", "火曜日", "水曜日", "木曜日", "金曜日" };

    try
    {
        //ファイルをオープンする
        using (StreamWriter sw = new StreamWriter(fileName, false, Encoding.GetEncoding("Shift_JIS")))
        {
            foreach (var day in days)
            {
                //テキストを書き込む
                sw.WriteLine(day);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

上記のソースコードを実行すると次の結果になります。Writeメソッドは改行してテキストを続けて記述することができます。

StreamWriterクラスのコンストラクタの第2引数が false なので、何度実行しても上書き保存されて上図の結果になります。

この第2引数を true にすると、ファイルの末尾にテキストが追加されます。Writeメソッドとここは同じです。

using (StreamWriter sw = new StreamWriter(fileName, true, Encoding.GetEncoding("Shift_JIS")))

 

WriteLineAsync メソッド

非同期でファイルにテキストを書き込む方法です。

ファイルに大量の文字を書く場合に発生するデッドロックを防止することができます。

private async Task WriteLineFileAsync()
{
    //ファイル名
    var fileName = "sample.txt";
    //var fileName = @"C:\sample.txt";  絶対パスでも良い

    //書き込むテキスト
    var days = new string[] { "月曜日", "火曜日", "水曜日", "木曜日", "金曜日" };

    try
    {
        //ファイルをオープンする
        using (StreamWriter sw = new StreamWriter(fileName, true, Encoding.GetEncoding("Shift_JIS")))
        {
            foreach (var day in days)
            {
                //テキストを書き込む
                await sw.WriteLineAsync(day);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

WriteLineメソッドをWriteLineAsyncメソッドに変更し、非同期のお約束事である「async / await」を付けます。

上記のソースコードを実行すると次の結果になります。WriteLineメソッドと同じで改行してテキストを続けて記述します

 

プログラミングを更に学びたい方必見

選抜された現役エンジニアから学べるプログラミングスクールで、現場や副業で役に立つノウハウやスキルを習得してみませんか?

オンラインに特化しているので場所に捉われず、自分のライフスタイルに合わせて受講することができます。

副業に興味がある方に人気の「はじめての副業コース」をはじめ、Web開発やシステム開発・アプリ開発などカテゴリ毎に受講ができ、初心者の方でも挫折することなく学ぶことができます。

まずはこの機会に現役のプロに無料相談をしてみましょう。

\ プログラミングスクールの詳細を確認する /

まとめ

この記事ではファイルに文字列を書き込む方法を紹介しました。

System.IOのStreamWriterクラスを利用することで、ファイルに書き込むことができます。書き込むための2種類のメソッドが用意されていますので、使用用途に応じて使い分けをしましょう。

  1. Writeメソッド:改行無しでファイルに書き込む場合に使用する
  2. WriteLineメソッド:改行有りでファイルに書き込む場合に使用する

以上、最後まで読んで頂きありがとうございました。

プログラミングを学習したいなら…

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
プログラミングスクール」がオススメです。

特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい

プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。

あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。

プログラミングスクールに興味がある方は是非チェックしてみてください。

> プログラミングを学ぶ <

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA