はじめに
本記事は、.NET Core における System.IO.Directory クラス の 逆引き Tips です。
今回は、以下を紹介します。
環境
.NET Core 2.2
指定したパスに存在するディレクトリを取得するには?
指定したパスに存在するディレクトリを取得するには、GetDirectories メソッド または EnumerateDirectories メソッドを使用します。
GetDirectories(string) | 引数で指定したパスに存在するディレクトリを配列で返します。 |
EnumerateDirectories(string) | 引数で指定したパスに存在するディレクトリをコレクションで返します。 |
GetDirectories も EnumerateDirectories もディレクトリの一覧を列挙しますが、EnumerateDirectories はキャッシュを持たないという点で異なります。EnumerateDirectories は全てのディレクトリを列挙する前に取り出しを開始することができます。一方 GetDirectories は全てのディレクトリを一括で配列に返すため、多くのディレクトリを取得するのには向いていません。
以下に GetDirectories と EnumerateDirectories の使用例を示します。
using System;
using System.IO;
using System.Collections.Generic;
namespace IOSample
{
class Program
{
static void Main(string[] args)
{
var path = "/Users/hiroki/Projects";
try
{
// ディレクトリを取得する
string[] dirs1 = Directory.GetDirectories(path);
foreach(var dir in dirs1)
{
Console.WriteLine(dir);
}
Console.WriteLine();
// ディレクトリをす取得する
List<string> dirs2 = new List<string>(Directory.EnumerateDirectories(path));
foreach (var dir in dirs2)
{
Console.WriteLine(dir);
}
}
catch ( IOException ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
指定したパスから検索パターンに一致するディレクトリを列挙するには?
指定したパスから検索パターンに一致するディレクトリを取得するには、GetDirectories メソッド または EnumerateDirectories メソッドを使用します。
GetDirectories(string, string) |
指定したパスから検索パターンに一致するディレクトリを配列で返します。 第1引数:取得対象のディレクトリが存在するパス |
EnumerateDirectories(string, string) |
指定したパスから検索パターンに一致するディレクトリをコレクションで返します。 第1引数:取得対象のディレクトリが存在するパス |
以下に検索パターンを指定してディレクトリの一覧を取得する例を示します。この例では「My」で始まるディレクトリのみを取得します。
using System;
using System.IO;
using System.Collections.Generic;
namespace IOSample
{
class Program
{
static void Main(string[] args)
{
var path = "/Users/hiroki/Projects";
try
{
// ディレクトリを取得する
string[] dirs1 = Directory.GetDirectories(path,"My*");
foreach(var dir in dirs1)
{
Console.WriteLine(dir);
}
Console.WriteLine();
// ディレクトリをす取得する
List<string> dirs2 = new List<string>(Directory.EnumerateDirectories(path,"My"));
foreach (var dir in dirs2)
{
Console.WriteLine(dir);
}
}
catch ( IOException ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
指定したパスに存在するディレクトリに含まれるサブディレクトリも取得するには?
指定したパスに存在するディレクトリに含まれるサブディレクトリも検索したい場合は、検索オプションが指定可能な、GetDirectories メソッド または EnumerateDirectories メソッドを使用します。
GetDirectories(String, String, SearchOption) |
指定したパスから検索パターンに一致するディレクトリを配列で返します。 第1引数:取得対象のディレクトリが存在するパス |
EnumerateDirectories(String, String, SearchOption) |
指定したパスから検索パターンに一致するディレクトリをコレクションで返します。 第1引数:取得対象のディレクトリが存在するパス |
第3引数に指定可能な SearchOption 列挙体を以下に示します。
AllDirectories | 現在のディレクトリとすべてのサブディレクトリも対象とします。 このオプションを指定した場合、検索範囲に、マウントされたドライブやシンボリック リンクのようなリパース ポイントも対象にします。 |
TopDirectoryOnly | 検索操作を現在のディレクトリのみにします。 |
以下に使用例を示します。この例では「My」で始まるディレクトリとその下にある「My」で始まるサブディレクトリのみを取得します。
using System;
using System.IO;
using System.Collections.Generic;
namespace IOSample
{
class Program
{
static void Main(string[] args)
{
var path = "/Users/hiroki/Projects";
try
{
// ディレクトリを取得する
string[] dirs1 = Directory.GetDirectories(path,"My*", SearchOption.AllDirectories);
foreach(var dir in dirs1)
{
Console.WriteLine(dir);
}
Console.WriteLine();
// ディレクトリをす取得する
List<string> dirs2 = new List<string>(Directory.EnumerateDirectories(path,"My*", SearchOption.AllDirectories));
foreach (var dir in dirs2)
{
Console.WriteLine(dir);
}
}
catch ( IOException ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
コメント