演習 - ファイルとディレクトリを作成する
.NET の File
クラスと Directory
クラスを使用すると、新しいファイルやディレクトリをプログラムで作成できます。
これまで、任意のフォルダー構造を読み取って .json 拡張子を持つファイルを検索できる堅牢なコマンド ライン アプリケーションを .NET で作成してきました。 次に、それらのファイルを読み取って含まれるデータを集計し、salesTotals という名前の新しいディレクトリ内の新しいファイルに合計を書き込む必要があります。
この演習では、最終的に売上合計が照合される salesTotalDir ディレクトリと totals.txt ファイルを作成します。
SalesTotals ディレクトリを作成する
Program.cs
ファイルで、反復処理を行って、FindFiles
関数から返された各ファイル名を "コンソール" 出力に書き込むforeach
ループを削除します。 この変更により、salesFiles
変数は使用されなくなります。 ただし、後のレッスンでそれを再び使うので、ここではこのままにします。Program.cs
ファイルで、salesTotalDir
という変数を作成します。ここに、salesTotalDir ディレクトリのパスが保持されます。var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); var salesFiles = FindFiles(storesDirectory);
Program.cs
ファイルで、ディレクトリを作成するコードを追加します。var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); Directory.CreateDirectory(salesTotalDir); // Add this line of code var salesFiles = FindFiles(storesDirectory);
totals.txt ファイルを書き込む
Program.cs
ファイルで、新しく作成された salesTotalDir ディレクトリ内に、totals.txt という空のファイルを作成するコードを追加します。 今は、ファイルの内容に空の文字列を使用しておきます。var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); Directory.CreateDirectory(salesTotalDir); var salesFiles = FindFiles(storesDirectory); File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);
Ctrl+S / Cmd+S キーを押して、ファイルを保存します。
ターミナル プロンプトから次のコードを実行して、プログラムを実行します。
dotnet run
ファイル エクスプローラーで [更新] アイコンを選択します。
完了までもう少しです。 最後の手順では、sales ファイルを読み取り、合計を加算し、総計を新しい "totals.txt" ファイルに書き込みます。 次に、ファイル内のデータを読み取って解析する方法について学習します。
行き詰まっていますか?
この演習中に行き詰まった場合のために、この時点までの完全なコードを次に示します。
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
Directory.CreateDirectory(salesTotalDir);
var salesFiles = FindFiles(storesDirectory);
File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
return salesFiles;
}