演習 - ファイル システムを操作する
.NET を使用すると、ファイルとフォルダーに関する情報を検索して取得することができます。
Tailwind Traders は、世界中に多数の実店舗を持っています。 各店舗では、毎晩、その日のすべての売上の合計を含む "sales.json" という名前のファイルが作成されます。 これらのファイルは、店舗 ID を名前とするフォルダーに整理されています。
注
このモジュールでは、ローカル開発に .NET CLI (コマンド ライン インターフェイス) と Visual Studio Code を使用します。 このモジュールを完了した後、Visual Studio (Windows)、Visual Studio for Mac (macOS)、または Visual Studio Code (Windows、Linux、および macOS) での継続的開発などの開発環境を使用して、学習したその概念を適用できます。
このモジュールでは、.NET 8.0 SDK を使います。 適切なコマンド ターミナルで次のコマンドを実行して、.NET 8.0 がインストールされていることを確認します。
dotnet --list-sdks
次の例のような出力が表示されます。
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
8 で始まるバージョンが一覧に表示されていることを確実にします。 何も表示されていない場合、またはコマンドが見つからない場合は、 最新の .NET 8.0 SDK をインストールします。
プロジェクトをクローンする
この演習では、"sales.json" という名前のファイルをディレクトリとそのサブディレクトリで検索する .NET プログラムを作成します。
スタート プロジェクトは既に自動的に作成されています。 Visual Studio Code の統合ターミナルを使用して、それをクローンします。
Visual Studio Code を開きます。
メイン メニューで[表示]>[ターミナル]を選択してターミナル ウィンドウを開きます。
(省略可能) ターミナル ウィンドウで、ファイルのコピー先のディレクトリ (
c:\MyProjectsなど) に移動します。ターミナル ウィンドウで、次のコマンドを実行してスターター プロジェクトをクローンし、クローンしたプロジェクトに移動します。
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files次のコマンドを実行して、新しい .NET コンソール プロジェクトを作成します。
dotnet new console -f net8.0 -n mslearn-dotnet-files -o .次のコマンドを実行して、Visual Studio Code の同じインスタンスで新しい .NET プロジェクトを開きます。
code -a .ヒント
この時点で、プロジェクトのビルドと実行に必要な資産が見つからないというメッセージが Visual Studio Code で表示される場合があります。
感嘆符付きの三角形を選択し、[ ターミナルの再起動 ] を選択して、Visual Studio Code でプロジェクトを実行およびデバッグできるようにするファイルを追加します。
エクスプローラー ウィンドウの mslearn-dotnet-files の下で、 stores フォルダーと各フォルダー内の番号付きフォルダーを展開します。
sales.json ファイルを検索する
次のタスクでは、mslearn-dotnet-files プロジェクトのすべてのフォルダー内のすべての sales.json ファイルを検索するプログラムを作成します。
System.IO 名前空間を含める
エクスプローラー ウィンドウで、
Program.csファイルを選んでエディターで開きます。
Program.csファイルの最初の行に次のコードを貼り付けて、System.IOおよびSystem.Collections.Generic名前空間をインポートします。using System.IO; using System.Collections.Generic;
注
.NET 6 以降では、前記のコードの 2 つのステートメントは、ImplcitUsings プロパティ グループを介して新しいプロジェクトに自動的に組み込まれます。 新しいコンソール プロジェクトを作成するときに -f net8.0 フラグを指定したので、それらは暗黙的に追加されます。 ただし、古いプロジェクトを使用している場合は、Program.cs ファイルに含める必要があります。ファイルに残しても、このプロジェクトには影響しません。
sales.json ファイルを検索する関数を記述する
FindFiles パラメーターを受け取る folderName という新しい関数を作成します。
Console.WriteLine("Hello, World!") 行を次のコードに置き換えます。
IEnumerable<string> FindFiles(string folderName) { List<string> salesFiles = new List<string>(); var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories); foreach (var file in foundFiles) { // The file name will contain the full path, so only check the end of it if (file.EndsWith("sales.json")) { salesFiles.Add(file); } } return salesFiles; }using関数を呼び出すために、FindFilesステートメントの下に次のコードを挿入します。 このコードは、ファイルを検索する場所として ストア フォルダー名を渡します。var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }Ctrl + S (または Cmd + S macOS) キーを押して、
Program.csファイルを保存します。
プログラムを実行する
ターミナル ウィンドウで次のコマンドを入力して、プログラムを実行します。
dotnet runプログラムによって、次の出力が表示されるはずです。
stores/sales.json stores/201/sales.json stores/202/sales.json stores/203/sales.json stores/204/sales.json
お疲れ様でした。 これで、 stores ディレクトリ内のすべてのフォルダーを走査し、検出されたすべての sales.json ファイルを一覧表示するコマンド ライン プログラムが正常に作成されました。
この例では、 stores ディレクトリへのパスはかなり単純で、プログラムの作業ディレクトリにあります。 次のユニットでは、Path クラスを使用して、オペレーティング システム全体で機能する複雑な構造を構築する方法を学習します。
行き詰まっていますか?
プログラムの実行で問題が発生した場合のために、Program.cs ファイルの完成したコードを次に示します。
Program.cs ファイルの内容をこのコードに置き換えます。
var salesFiles = FindFiles("stores");
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
// The file name will contain the full path, so only check the end of it
if (file.EndsWith("sales.json"))
{
salesFiles.Add(file);
}
}
return salesFiles;
}