Categories: Cシャープ

C#でテキストファイルに書き込む方法を徹底解説!

プログラムからテキストファイルにデータを書き込む処理は、業務システムやログ記録、CSV出力などさまざまな場面で活用されます。C#では、.NETの標準ライブラリを使って簡単にテキストファイルへの書き込みが可能です。本記事では、C#初心者の方でも理解しやすいように、テキストファイルへの書き込み方法を基礎から応用まで丁寧に解説します。StreamWriterFile.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を使った書き込み方法

より柔軟な書き込みをしたい場合は、StreamWriterクラスを使う方法が一般的です。例えば、複数行を書いたり、追記したり、エンコードを指定したい場合に便利です。

using System.IO;

class Program
{
static void Main()
{
using (StreamWriter writer = new StreamWriter("sample2.txt"))
{
writer.WriteLine("1行目:StreamWriterの書き込み");
writer.WriteLine("2行目:複数行にも対応できます");
}
}
}

usingブロックを使うことで、ファイルのクローズ処理も自動で行われます。


追記(Append)モードでの書き込み

既存のファイルに内容を追加したい場合は、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#のファイル操作をマスターすれば、アプリケーションの幅も大きく広がります。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。