C# ファイルの読み書き
C#のファイル入出力(I/O)操作は、多くのソフトウェアアプリケーションに不可欠な要素であり、開発者はファイルからの読み取りとファイルへの書き込みを効率的に行うことができます。 データの保存、アプリケーションイベントのログ、大量のテキストデータやバイナリデータの処理など、C#はファイルを扱うための堅牢なツールを提供します。 ティム・コーリーのビデオ"C# Data Access:テキストファイル"では、データの保存と検索の両方にテキストファイルを使用する方法に焦点を当て、これらのファイル操作の詳細なウォークスルーを提供しています。 この記事では、ティムがビデオで取り上げた主要な概念とテクニックを要約し、C#でのファイルI/O操作に関する実践的な洞察を提供することを目的としています。
はじめに
C#では、ファイルの入出力操作は、テキストファイルからの読み取りとテキストファイルへの書き込みに不可欠です。 File クラスは、既存のファイルと対話するか、新しいファイルを作成するための静的メソッドを提供します。 StreamReader と StreamWriter は、ファイルの読み書きに一般的に使用されます。 StreamReader はファイルを行ごとに読み込み、各行のテキストまたは文字列の配列にアクセスできるようにします。 より大きなファイルを効率的に読み込むために、while ループも使用できます。 StreamWriter クラスは、文字列および配列の書き込みをサポートし、データをファイルに書き込むために使用されます。 既存のファイルにテキストを追加したり、ファイル全体を上書きしたりするために使用できます。WriteLine や WriteText のようなメソッドを使って、テキストファイル内のデータ操作を簡単に行えます。
これらの操作は一般に static void Main メソッド内で実行され、ファイルパスを定義します。 たとえば、ファイル名を指定して StreamWriter を使用して、単一の文字列または文字列配列全体を書き込むことができます。 using ステートメントは、操作後にファイルが適切に閉じられ、リソースリークを防ぐことを保証します。 StreamReader を使用してファイルを行ごとに読み込み、ファイルが存在しない場合やアクセスできない場合に生じる可能性のあるエラーを管理するために例外を処理することもできます。 これらのファイルI/O機能により、C#はファイルを効率的かつ効果的に扱うための優れた選択肢となっています。
Timは、C#でテキストファイルから読み込んだり、テキストファイルに書き込んだりすることの簡単さを強調することで、このトピックを紹介します。 数行のコードでこれらのタスクを実現し、テキスト・ファイルをデータ・ストレージの有力な選択肢にする方法を示す。
デモ コンソール アプリケーションの作成
Timはまず、Visual Studioを使って "TextFileDataAccessDemo "という名前の新しいコンソールアプリケーションを作成します。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace TextFileDataAccessDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine(); // Keeps the console window open to view the output
}
}
}using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace TextFileDataAccessDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine(); // Keeps the console window open to view the output
}
}
}彼はコンソールウィンドウを開いたままにして出力を見ることができるようにする Console.ReadLine の使用法を説明します。
テキストファイルからの読み取り
Tim は File.ReadAllLines メソッドを使用してテキストファイルから読み取る方法を示しています。 ファイルパスの扱い方や、エスケープ文字を避けるための文字列リテラルの使い方も紹介しています。
string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();File.ReadAllLines メソッドは指定されたファイルからすべての行を読み取り、文字列の配列として返します。 Timは、この配列をリストに変換して、簡単に操作できるようにします。
テキストファイルへの書き込み
Tim は File.WriteAllLines メソッドを使用してテキストファイルにデータを書き込む方法を説明します。 彼は、リストに新しい行を追加し、更新されたリストをファイルに書き戻す方法を示します。
lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);このコードは、リストに新しいエントリーを追加し、リスト全体をファイルに書き戻します。
データモデルの作成とファイルからの入力
Tim はテキストファイルの各エントリのデータ構造を表すために Person クラスを作成します。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
}public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
}その後、彼はファイルを読み込んで Person オブジェクトのリストを作成します。
List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
string[] entries = line.Split(',');
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
string[] entries = line.Split(',');
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}このコードは各行を読み取り、カンマで分割し、抽出したデータを使用して Person オブジェクトを作成します。
文字列補間
ティムは、変数と文字列を組み合わせるプロセスを簡素化するC# 6.0の機能である文字列補間を紹介します。 このメソッドは文字列の前に $ 記号と波括弧 {} を使用して変数を直接文字列に埋め込みます。
foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}この構文は、+ 演算子を使用した従来の連結と比較して、より簡潔で効率的です。

データ検証
ティムは、テキストファイルからデータを読み込む際の検証の重要性を強調する。彼は、データの構造を仮定することのリスクを指摘し、分割されたエントリの長さをチェックすることを推奨しています。
foreach (string line in lines)
{
string[] entries = line.Split(',');
if (entries.Length == 3)
{
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
else
{
// Handle error
Console.WriteLine("Invalid data format.");
}
}foreach (string line in lines)
{
string[] entries = line.Split(',');
if (entries.Length == 3)
{
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
else
{
// Handle error
Console.WriteLine("Invalid data format.");
}
}これにより、正確なエントリ数の行のみが処理され、潜在的なランタイムエラーが回避されます。
オブジェクトをリストに追加する
Tim はリストに新しいオブジェクトを追加する方法を示します。彼は匿名の Person クラスのインスタンスを使用してリストに新しい人物を追加します。
people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });これにより、Person オブジェクトが1行で作成および初期化され、それが people リストに追加されます。
テキストファイルにデータを書き戻す
Tim は Person オブジェクトのリストをテキストファイルに書き戻す方法を説明します。彼は Person オブジェクトのリストを文字列のリストに変換し、それぞれの文字列がファイルの1行を表します。
List<string> output = new List<string>();
foreach (var person in people)
{
output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);List<string> output = new List<string>();
foreach (var person in people)
{
output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);このコードは people リストを反復し、各 Person オブジェクトについてCSV文字列を作成し、文字列のリストをファイルに書き込みます。
結論
Tim CoreyによるC#でのファイルI/O操作に関する詳細なガイドは、テキストファイルからの読み取りとテキストファイルへの書き込みに関する実践的な洞察を提供します。 彼の例に従うことで、開発者はテキストファイルを使って効果的にデータを管理し、堅牢なデータストレージソリューションを実装することができます。 より深い理解と実践的な学習体験のために、ティム・コーリーのビデオをぜひご覧ください。実例を挙げながら、これらの概念を深く掘り下げています。

