演習 - ファイル システムを操作する
.NET を使用すると、ファイルとフォルダーに関する情報を検索して取得することができます。
Tailwind Traders は、世界中に多数の実店舗を持っています。 各店舗では、毎晩、その日のすべての売上の合計を含む "sales.json" という名前のファイルが作成されます。 これらのファイルは、店舗 ID を名前とするフォルダーに整理されています。
Note
このモジュールでは、ローカル開発に .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 で表示される場合があります。
中に感嘆符がある三角形を選択してから、[Relaunch terminal](ターミナルの再起動) を選択し、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;
Note
.NET 6 以降では、前記のコードの 2 つのステートメントは、ImplcitUsings
プロパティ グループを介して新しいプロジェクトに自動的に組み込まれます。 新しいコンソール プロジェクトを作成するときに -f net8.0
フラグを指定したので、それらは暗黙的に追加されます。 ただし、古いプロジェクトを使用している場合は、Program.cs
ファイルに含める必要があります。ファイルに残しても、このプロジェクトには影響しません。
sales.json ファイルを検索する関数を記述する
folderName
パラメーターを受け取る FindFiles
という新しい関数を作成します。
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; }
FindFiles
関数を呼び出すために、using
ステートメントの下に次のコードを挿入します。 このコードでは、ファイルの検索場所として、stores フォルダーの名前を渡します。var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }
Ctrl + S (または macOS の場合は Cmd + S) キーを押して、
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;
}