C#でテキストファイルへデータを書き込むには System.IO.StreamWriter クラスを使います。
ここでは基本的な StreamWriter クラスの使い方についてまとめてみます。
ファイルを開く
StreamWriterオブジェクトを生成すると、ファイルがオープンされてデータを書き込める状態になります。ファイルが無い場合は新たにファイルが作成されてからオープンします。
書き込むファイルの名前はコンストラクタの引数に渡します。
コンストラクタの2番目の引数に bool 値を渡すと、既にファイルがある場合の挙動を制御できます。
true を渡した場合、既存のデータの末尾に追加していくようになり、
false を渡した場合、既存のデータを全て消去してから書き込む事になります。
ファイルの文字エンコーディングも合わせてコンストラクタの引数に渡しましょう。
※文字コード
テキストファイルに書かれる文字は文字コードと呼ばれるバイト表現と文字の対応表を使って保存されています。
保存時に使った文字コードと同じ文字コードで解釈して読み込まなければ漢字などが正しく読み込めない事があります。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); var writer = new System.IO.StreamWriter(fileName, false, encoding);
ファイルへ書き込む
StreamWriter クラスの WriteLine() メソッドを使うと1行ずつ書き込んでいくことが出来ます。
WriteLine() メソッドは引数で渡した文字列に加えて改行記号もファイルに書き込みます。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); var writer = new System.IO.StreamWriter(fileName, false, encoding); for (int i = 0; i < 10; ++i) { var record = string.Format("{0}", i); writer.WriteLine(record); }
ファイルを閉じる
ファイルは開いたら必ず閉じる必要があります。
ファイルを閉じるには StreamWriter クラスの Close() メソッドを呼び出します。
Close は finally で
ファイルの書き込み中に例外が発生する可能性がある事を必ず考慮してコードを書きましょう。
try ... finally ステートメントの finally ブロックで Close() を呼び出す事で例外発生時にも対応したコードを書くことが出来ます。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); var writer = new System.IO.StreamWriter(fileName, false, encoding); try { for (int i = 0; i < 10; ++i) { var record = string.Format("{0}", i); writer.WriteLine(record); } } finally { writer.Close(); }
Close の代わりに using を使う
StreamWriter クラスは IDisposable インターフェースをもっているので、Close() メソッドのかわりに using 構文を使う事も出来ます。
下記の例は、上の try … finally を使ったコードと全く同じ動きをします。
using ブロックを抜けた時点で(例外が起きる起きないにかかわらず)IDispposableインターフェースの Dispose() メソッドが呼ばれます。この Dispose() でファイルを閉じる処理が行われます。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); using (var writer = new System.IO.StreamWriter(fileName, false, encoding)) { for (int i = 0; i < 10; ++i) { var record = string.Format("{0}", i); writer.WriteLine(record); } }
関連記事
- C#の値型と参照型の違い
- C#のコンストラクタでオーバーロード
- C#のコンストラクタの継承
- C#のジェネリックを使おう
- C#のデリゲート (delegate) って何?
- C#のデリゲートお手軽にする匿名メソッド
- C#のラムダ式【=>】って何?
- C#で基底クラスのメソッドを置き換えるオーバーライド
- C#でキャストとas演算子を使いこなす
- C#で型を判別するtypeofとis演算子
- C#の値型でもnullを扱えるようにするNullable
- C#のリソース解放にはIDisposableとusingを使おう
- C#のStringとstring、Int32とint 違いは・・・ない!
- C#でasync/awaitを使った非同期処理
- C#で文字列を指定の区切り文字で分割
- C#のstring.Formatで桁数や書式を指定する
- C#の配列やListをソートする
- C#の配列やListを検索する (Find,FindAll,FindIndex)
- C#の配列やListを高速に検索する (BinarySearch)
- C#の配列の中に指定の要素が存在するかを調べる(LINQ Contains)
- C#の配列の中に条件を満たす要素が存在するかを調べる(LINQ Any)
- C#の配列から条件に合う要素を抽出する(LINQ Where)
- C#の配列で要素毎の処理結果を得る(LINQ Select)
- C#の配列を並び替える(LINQ OrderBy,ThenBy)
- C#の配列をグループ毎に処理する(LINQ GroupBy)
- C#の配列を内部結合(INNER JOIN)する(LINQ Join)
- C#の配列から最初の要素を取り出す(LINQ First,FirstOrDefault)
- C#の配列の重複要素を削除する(LINQ Distinct)
- C#でフォルダ内のファイル名一覧を取得する
- C#でテキストファイルを読み込む
- C#でテキストファイルに書き込む
- C#でバイナリファイルを読み込む
- C#でバイナリファイルに書き込む
コメントをお書きください