StreamWriterクラスを使ってテキストファイルにデータを書き込む [C#]

System.IO名前空間にあるStreamWriterクラスを使用することで、テキストファイルにデータを書き込むことができます。
ここでは、StreamWriterクラスを使ってテキストファイルにデータを書き込む方法を紹介します。

本記事のサンプルコードでは、以下の名前空間のusingが行われていることを前提としています。

StreamWriterクラスでテキストを書き込む

StreamWriterクラスにはテキストファイルへデータを書き込むためのメソッドがいくつか用意されています。
以下に主なメソッドを記載します。

メソッド 説明
Write ストリームに文字列、文字配列、文字などを書き込みます。
WriteAsync 非同期でストリームに文字列、文字配列、文字などを書き込みます。
WriteLine ストリームに1行分の文字列(文字列とそれに続く改行(行終端記号))を書き込みます。
WriteLineAsync 非同期でストリームに1行分の文字列を書き込みます。

文字列を書き込む

テキストファイルにデータを書き込むにはWriteメソッドを使用します。
以下にテキストファイルへ文字列データを書き込む簡単な例を示します。
ここでは、C:\TextフォルダーにあるSample.txtファイルに文字列データを書き込んでいます。

StreamWriterクラスのWriteメソッドでファイルから文字列データを書き込むために、コンストラクタの引数にファイルパスを指定して、StreamWriterオブジェクトのインスタンスを生成します。
Writeメソッドは指定したパスのテキストファイルに文字列データを書き込みます。

StreamWriterオブジェクトでは、文字列データを書き込んだ後に、Closeメソッドを呼び出してストリームを閉じます。
Closeメソッドを呼び出すことで、関連付けられたすべてのシステムリソースが解放されます。

既存のテキストファイルに追加で書き込む

StreamWriterクラスのWriteメソッドで既存のテキストファイルに追加で文字列を書き込むには、StreamWriterクラスのコンストラクタの第2引数にtrueを指定します。

Writeメソッドで既存のファイルに追記すると、ファイルの末尾に文字列データが追加されます。第2引数にfalseを指定するとテキストファイルのデータは上書きされます。

上記の例ではWriteメソッドの引数に文字エンコーディングを指定していません。文字エンコーディングを指定せずにWriteメソッドを呼び出すと、Writeメソッドは文字エンコーディングにUTF-8を使用して、テキストファイルへデータを書き込みます。

文字エンコーディングを指定して書き込む

StreamWriterクラスには文字列データを書き込む際の文字エンコーディングを指定することができます。
以下に文字エンコーディングにShift-JISを指定して、テキストファイルからデータを書き込む例を示します。

文字エンコーディングを指定する際は、StreamWriterクラスのコンストラクタの引数に指定します。
StreamWriterクラスの各メソッドは指定された文字エンコーディングに従ってファイルに文字列データを書き込みます。
文字エンコーディングの指定例をいくつか挙げておきます。

Closeについて

StreamWriterクラスを使用した後はCloseメソッドでストリームを閉じるようにしますが、usingステートメントを使用することで、Closeメソッドを呼び出さずにシステムリソースを開放することができます。
以下にusingステートメントを使用したコード例を示します。

1行ずつ書き込む

ここまではStreamWriterクラスのWriteメソッドで、指定したテキストファイルに文字列データを一気に書き込んでいましたが。StreamWriterクラスには、1行ずつ文字列データを書き込むメソッドも用意されています。
文字列をテキストファイルへ1行ずつデータを書き込むにはWriteLineメソッドを使用します。
以下にWriteLineメソッドでテキストファイルへ1行ずつ文字列を書き込むサンプルコードを示します。

WriteLineメソッドで文字列データを書き込むと、テキストファイルに1行分の文字列と改行(行の終端記号)が出力されます。

非同期で書き込む

StreamWriterクラスには非同期で文字列データを書き込むメソッドが用意されています。
ここまでサンプルで示してきたWriteメソッド、WriteLineメソッドにも対応する非同期読込用メソッドが用意されています。
以下にWriteメソッドに対応する非同期実行用のWriteAsyncメソッドを使用して、非同期でテキストファイルのデータを書き込むサンプルコードを示します。

実行結果

StreamWriterクラスで書き込んだテキストファイルの実行結果

StreamWriterオブジェクトの生成

StreamWriterオブジェクトのインスタンスは、FileInfoクラスのAppendTextメソッド、CreateTextメソッド、またはFileクラスのAppendText静的メソッド、CreateText静的メソッドで生成することもできます。
FileInfoクラスのAppendTextメソッド、CreateTextメソッド、またはFileクラスのAppendText静的メソッド、CreateText静的メソッドで生成したStreamWriterオブジェクトの文字エンコーディングはUTF-8になります。

FileInfoクラスのAppendTextメソッド、またはFileクラスのAppendText静的メソッドで作成したStreamWriterオブジェクトは、既存のファイルに追加で書き込みます。
FileInfoクラスのCreateTextメソッド、またはFileクラスのCreateText静的メソッドで作成したStreamWriterオブジェクトは、既存のファイルに上書きで書き込みます。