はじめに
C#でのファイル操作を理解する上で、テキストファイルの読み書きは基本中の基本です。アプリケーション開発では、ログの保存や設定ファイルの管理など、テキストファイルを扱う場面が多くあります。今回の記事では、C#におけるテキストファイルの読み書きの方法について、具体的なコード例を交えて解説していきます。
テキストファイルの読み書きに使うメソッド
C#では、テキストファイルの操作を簡単に行うためのメソッドが用意されています。これらのメソッドはSystem.IO
名前空間に属し、単一行の読み書きから、複数行やバイト単位の処理まで対応しています。ここでは、特によく使用するメソッドを紹介します。
メソッド | 説明 |
---|---|
File.ReadAllText | ファイル全体を一度に文字列として読み込みます。 |
File.WriteAllText | ファイルに文字列を一度に書き込みます。 |
File.ReadAllLines | ファイルの各行を文字列の配列として読み込みます。 |
File.WriteAllLines | 文字列の配列をファイルに各行として書き込みます。 |
StreamReader | ファイルを一行ずつ読み取るためのクラスです。 |
StreamWriter | ファイルに一行ずつ書き込むためのクラスです。 |
基本的なテキストファイルの書き込み
まずは、テキストファイルに文字列を書き込む方法を見ていきましょう。C#では、File.WriteAllText
を使用することで簡単にファイルに文字列を書き込むことができます。
File.WriteAllTextでの書き込み
using System.IO; class Program { static void Main() { string filePath = @"C:\example\myfile.txt"; string content = "こんにちは、世界!"; // ファイルに文字列を書き込む File.WriteAllText(filePath, content); Console.WriteLine("ファイルに書き込みが完了しました。"); } }
解説:
File.WriteAllText
は指定したパスにファイルを作成し、指定した文字列を書き込みます。ファイルが既に存在する場合は、内容が上書きされます。
基本的なテキストファイルの読み込み
次に、ファイルから文字列を読み込む方法を見てみましょう。File.ReadAllText
を使うと、ファイル全体を一度に読み込むことができます。
File.ReadAllTextでの読み込み
using System; using System.IO; class Program { static void Main() { string filePath = @"C:\example\myfile.txt"; if (File.Exists(filePath)) { // ファイルから全ての内容を読み込む string content = File.ReadAllText(filePath); Console.WriteLine("ファイルの内容: \n" + content); } else { Console.WriteLine("ファイルが存在しません。"); } } }
解説:
File.ReadAllText
は、ファイルの全内容を一つの文字列として読み込みます。ファイルが存在しない場合は、File.Exists
メソッドを使って存在確認を行うことが一般的です
複数行のテキスト操作
テキストファイルを複数行に渡って操作する場合、File.ReadAllLines
やFile.WriteAllLines
が便利です。これらのメソッドを使うことで、各行を配列形式で処理できます。
複数行の書き込み: File.WriteAllLines
using System.IO; class Program { static void Main() { string filePath = @"C:\example\multilinefile.txt"; string[] lines = { "1行目", "2行目", "3行目" }; // 複数行をファイルに書き込む File.WriteAllLines(filePath, lines); Console.WriteLine("複数行の書き込みが完了しました。"); } }
解説:
File.WriteAllLines
は文字列の配列を受け取り、それぞれの要素をファイルの一行として書き込みます。
複数行の読み込み: File.ReadAllLines
using System; using System.IO; class Program { static void Main() { string filePath = @"C:\example\multilinefile.txt"; if (File.Exists(filePath)) { // ファイルの各行を配列として読み込む string[] lines = File.ReadAllLines(filePath); foreach (string line in lines) { Console.WriteLine(line); } } else { Console.WriteLine("ファイルが存在しません。"); } } }
解説:
File.ReadAllLines
は、ファイルの各行を文字列の配列として読み込むため、ループ処理を通して一行ずつ処理できます。
StreamReaderとStreamWriterによる高度な操作
File.ReadAllText
やFile.WriteAllText
はシンプルで使いやすい反面、大量のデータや一部のデータを処理したい場合には不向きです。StreamReader
とStreamWriter
を使うことで、ファイルを一行ずつ読み書きすることができ、メモリ効率を良くしたい場合に適しています。
StreamReaderによる読み込み
using System; using System.IO; class Program { static void Main() { string filePath = @"C:\example\myfile.txt"; if (File.Exists(filePath)) { using (StreamReader reader = new StreamReader(filePath)) { string line; while ((line = reader.ReadLine()) != null) { Console.WriteLine(line); } } } else { Console.WriteLine("ファイルが存在しません。"); } } }
解説:
StreamReader
を使うと、ファイルを一行ずつ読み込むことができます。これにより、大きなファイルでもメモリを節約しつつ処理が可能です。
StreamWriterによる書き込み
using System.IO; class Program { static void Main() { string filePath = @"C:\example\myfile.txt"; using (StreamWriter writer = new StreamWriter(filePath)) { writer.WriteLine("新しい行を追加します。"); writer.WriteLine("さらにもう一行追加します。"); } Console.WriteLine("書き込みが完了しました。"); } }
解説:
StreamWriter
を使うと、ファイルに一行ずつ書き込むことができます。WriteLine
メソッドを使うことで、各行に自動的に改行が付与されます。
ファイルの追記: AppendTextメソッド
既存のファイルに内容を追加したい場合は、File.AppendText
メソッドが便利です。このメソッドは、ファイルの末尾にテキストを追加します。
AppendTextでの追記
using System.IO; class Program { static void Main() { string filePath = @"C:\example\myfile.txt"; using (StreamWriter writer = File.AppendText(filePath)) { writer.WriteLine("この行をファイルの末尾に追加します。"); } Console.WriteLine("追記が完了しました。"); } }
解説:
File.AppendText
は、既存のファイルがある場合、その末尾に文字列を追加し、ファイルが存在しない場合は新しく作成します。
File.AppendText
は、既存のファイルがある場合、その末尾に文字列を追加し、ファイルが存在しない場合は新しく作成します。
まとめ
今回の記事では、C#を使ったテキストファイルの読み書き操作について解説しました。基本的なFile
クラスのメソッドから、より細かな制御が可能なStreamReader
やStreamWriter
まで、さまざまな手法を紹介しました。これらを組み合わせることで、効率的で柔軟なファイル操作が可能になります。
次回は、C#でのバイナリファイルの操作方法について解説します。テキストファイルとは異なるデータ形式を扱う際の注意点や具体的な実装例を学んでいきましょう。
コメント