ファイル システムを操作する

完了

.NET には、System.IO 名前空間で見つけられるファイル システムを操作するための組み込み型が含まれています。

ここでは、C# を使用してファイル システムを読み取り、ファイルとディレクトリを検出することで、System.IO で使用可能な型について学習します。

シナリオ

大規模な小売業者は、後でバッチ処理できるように、ファイルにデータを書き込むことがよくあります。

Tailwind Traders では、自社の各店舗にそれぞれの売上合計をファイルに書き込ませ、そのファイルを中央の場所に送信させています。 これらのファイルを使用するには、会社でファイル システムを操作できるバッチ処理を作成する必要があります。

System.IO 名前空間を含める

System.IO 名前空間には、ファイルとディレクトリを操作できる組み込みの型が含まれます。 たとえば、ファイルとディレクトリのコレクションを検索条件に基づいて取得し、ファイルとディレクトリのプロパティを get および set できます。 また、System.IO 名前空間の型を使用して、データ ストリームとファイルの読み取りと書き込みを、同期的にも非同期的にも行うことができます。

ここでは、System.IO 名前空間に含まれる Directory クラスを使用してディレクトリを操作する場合に知っておく必要があることに焦点を当てます。 Directory クラスでは、ディレクトリとサブディレクトリを作成、移動、および列挙するための静的メソッドが公開されます。

すべてのディレクトリの一覧を取得する

Directory クラスは、多くの場合、ディレクトリを一覧表示 (または "列挙") するために使用されます。 たとえば、Tailwind Traders のファイル構造には、stores というルート フォルダーがあります。 そのフォルダーには、店舗番号で整理されたサブフォルダーがあり、そのフォルダー内には売上合計と在庫のファイルがあります。 構造はこの例のようになります。

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

最上位レベルのディレクトリに目を通し名前を一覧表示するには、Directory.EnumerateDirectories 関数を使用します。

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

特定のディレクトリ内のファイルの一覧を取得する

ディレクトリ内にあるすべてのファイルの名前の一覧を取得するには、Directory.EnumerateFiles 関数を使用します。

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

ディレクトリとすべてのサブディレクトリのすべての内容の一覧を取得する

Directory.EnumerateDirectoriesDirectory.EnumerateFiles のどちらの関数にも、ファイルやディレクトリが一致する必要のある検索パターンを指定するパラメーターを受け取るオーバーロードがあります。

また、それらには指定したフォルダーとそのすべてのサブフォルダーを再帰的に走査するかどうかを示すパラメーターを受け取る別のオーバーロードもあります。

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

次の演習では、Directory クラスを使用して、Tailwind Traders のメインの stores ディレクトリ内を動的に読み取り、すべての sales.json ファイルを検索します。

自分の知識をチェックする

1.

次のうち、Directory.EnumerateFiles を使用して実行できるタスクはどれですか?