プログラムからテキストファイルにデータを書き込む処理は、業務システムやログ記録、CSV出力などさまざまな場面で活用されます。C#では、.NETの標準ライブラリを使って簡単にテキストファイルへの書き込みが可能です。本記事では、C#初心者の方でも理解しやすいように、テキストファイルへの書き込み方法を基礎から応用まで丁寧に解説します。StreamWriter
やFile.WriteAllText
、追記やエンコード指定の方法なども紹介するので、ぜひ参考にしてください。
C#で最もシンプルにテキストファイルを書き込む方法は、System.IO.File.WriteAllText
を使うことです。このメソッドは、指定したファイルに文字列を書き込むもので、ファイルが存在しない場合は新規作成されます。
using System.IO;
class Program
{
static void Main()
{
string filePath = "sample.txt";
string content = "こんにちは、C#のファイル書き込みです!";
File.WriteAllText(filePath, content);
}
}
このコードを実行すると、同じフォルダに「sample.txt」が作成され、指定した文字列が書き込まれます。
より柔軟な書き込みをしたい場合は、StreamWriter
クラスを使う方法が一般的です。例えば、複数行を書いたり、追記したり、エンコードを指定したい場合に便利です。
using System.IO;
class Program
{
static void Main()
{
using (StreamWriter writer = new StreamWriter("sample2.txt"))
{
writer.WriteLine("1行目:StreamWriterの書き込み");
writer.WriteLine("2行目:複数行にも対応できます");
}
}
}
using
ブロックを使うことで、ファイルのクローズ処理も自動で行われます。
既存のファイルに内容を追加したい場合は、StreamWriter
の第2引数にtrue
を指定することで追記モードになります。
using (StreamWriter writer = new StreamWriter("sample2.txt", true))
{
writer.WriteLine("3行目:この行は追記されます");
}
これにより、前回の内容を保持したまま、さらに新しい行が追加されます。
ファイルの文字コードを指定したい場合は、第3引数にエンコード情報を渡すことができます。たとえばUTF-8やShift_JISなどが選べます。
using System.Text;
using (StreamWriter writer = new StreamWriter("utf8_sample.txt", false, Encoding.UTF8))
{
writer.WriteLine("UTF-8で書き込んだ文字列");
}
特に日本語を扱う場合、エンコードを正しく指定しないと文字化けの原因になりますので注意が必要です。
ファイルの上書きを避けたい場合は、事前にファイルが存在するかどうかを確認する処理を加えましょう。
string filePath = "important.txt";
if (!File.Exists(filePath))
{
File.WriteAllText(filePath, "このファイルは一度だけ作成されます");
}
else
{
Console.WriteLine("ファイルはすでに存在します。上書きしません。");
}
このようにすることで、誤って重要なデータを消してしまうのを防げます。
ファイルの書き込みには、ディスク容量不足やアクセス権限の問題などでエラーが発生する可能性があります。try-catch
を使って例外処理を行いましょう。
try
{
File.WriteAllText("readonly_folder/sample.txt", "書き込みテスト");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("アクセスが拒否されました: " + ex.Message);
}
catch (IOException ex)
{
Console.WriteLine("入出力エラーが発生しました: " + ex.Message);
}
エラーをそのままにしておくとプログラムが強制終了してしまうため、ログ出力やユーザー通知などの対処が必要です。
大量のデータをファイルに書き込む場合、パフォーマンスにも注意が必要です。以下のようなポイントがあります。
Flush()
でデータを保存するusing (StreamWriter writer = new StreamWriter("bigdata.txt"))
{
for (int i = 0; i < 100000; i++)
{
writer.WriteLine("データ行:" + i);
}
writer.Flush(); // 明示的にバッファをフラッシュ
}
最後に、書き込んだ内容を読み取って表示する簡単なコードも紹介しておきます。
string content = File.ReadAllText("sample.txt");
Console.WriteLine("ファイルの内容:");
Console.WriteLine(content);
書き込みと読み込みを組み合わせることで、ログの確認やファイルの整合性チェックにも活用できます。
まとめ
C#でテキストファイルに書き込む方法は、File.WriteAllText
のような簡易的なものから、StreamWriter
を使った高度な方法までさまざまです。用途や状況に応じて適切な手段を選ぶことで、安全かつ効率的なファイル操作が可能になります。
実際の開発現場では、エンコードや例外処理、追記処理などを組み合わせて使う場面が多いため、基本から応用までしっかりと身につけておきましょう。C#のファイル操作をマスターすれば、アプリケーションの幅も大きく広がります。