この記事ではC#でテキストファイルを操作する方法を紹介します。
テキストファイルからの読み出し
以下のサンプルコードは、テキストファイルを1行ずつ読み込んでコンソールに出力します。
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = "sample.txt"; // 読み込むファイルのパス
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null) // ファイルの終わりまで1行ずつ読み込む
{
Console.WriteLine(line); // 読み込んだ行をコンソールに出力
}
}
}
}
テキストファイルへの書き込み
以下のサンプルコードは、テキストファイルに3行の文字列を書き込みます。
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = "sample.txt"; // 書き込むファイルのパス
string[] lines = new string[] { "一行目", "二行目", "三行目" };
using (StreamWriter writer = new StreamWriter(filePath))
{
foreach (string line in lines) // 配列の各行をファイルに書き込む
{
writer.WriteLine(line); // ファイルに行を書き込む
}
}
}
}
エンコーディングの指定
エンコーディングはファイルの形式のようなものです。「エンコーディングA」で書かれたファイルは、同じ「エンコーディングA」を指定して読み出す必要があります。
エンコーディングは StreamReader と StreamWriter のコンストラクタに指定します。例えば、Shift-JIS(SJIS、シフトJIS)エンコーディングを使用するには以下のようにします。
using System.Text;
Encoding encodingSjis = Encoding.GetEncoding("Shift_JIS");
// 読み込み時にシフトJISエンコーディングを指定
using (StreamReader reader = new StreamReader(filePath, encodingSjis))
{
// ...
}
// 書き込み時にシフトJISエンコーディングを指定
using (StreamWriter writer = new StreamWriter(filePath, false, encodingSjis))
{
// ...
}
UTF-8を指定する場合は以下のようになります。
using System.Text;
// 読み込み時にUTF-8エンコーディングを指定
using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8))
{
// ...
}
// 書き込み時にUTF-8エンコーディングを指定
using (StreamWriter writer = new StreamWriter(filePath, false, Encoding.UTF8))
{
// ...
}
StreamWriterのコンストラクタの第2引数 false は既存のファイルに追記するか?を指定する引数です。true の場合は既存のファイルがあれば追記、false の場合は既存のファイルがあっても新しいファイルを作り直します。
代表的なエンコーディング
- UTF-8: 世界的に最も広く使用されているエンコーディング。多言語に対応している。
- UTF-16: Unicode文字セットを使用。Windowsでよく使用される。
- Shift-JIS: 日本語の文字セット。日本で広く使用されている。
エンコーディングの選択は、ファイルの使用環境や対象言語によって異なります。処理対象のファイルに合わせて指定してください。
エンコーディングを省略するとどうなるか?
最初のサンプルコードは、StreamReader と StreamWriter のコンストラクタにエンコーディングを指定していません。このような場合、デフォルトのエンコーディングが使用されます。
私のPC(Win10日本語)では、デフォルトのエンコーディングはUTF-8となります。
まとめ
本記事ではC#でテキストファイルを操作する方法を紹介しました。