[Tips][フォルダー操作] 論理ドライブを取得する

使用しているPCの論理ドライブを取得するには、DirectoryクラスGetLogicalDrivesメソッドを使用します。

GetLogicalDrivesメソッドは論理ドライブを<論理ドライブ名>:\の形式で返します。

下記は論理ドライブを取得する例です。

VBの例

'論理ドライブを取得する
Dim strDrives() As String = System.IO.Directory.GetLogicalDrives()

C#の例

// 論理ドライブを取得する
string[] strDrives = System.IO.Directory.GetLogicalDrives();

[Tips][フォルダー操作] 指定したフォルダー内のファイルを取得する

指定したフォルダー内にあるファイルを取得するにはDirectoryクラスGetFilesメソッドを使用します。

GetFilesメソッドの第1引数にはファイルを取得したいフォルダーのパスを渡します。

第1引数のみを指定した場合には、指定したフォルダー内のファイルを取得することができます。

VB版 指定したフォルダー内のファイルを取得する例

Dim targetDir As String = "C:\Work"

'C:\Workにあるファイルを取得する
Dim strFiles() As String = IO.Directory.GetFiles(targetDir)

C#版 指定したフォルダー内のファイルを取得する例

string targetDir = @"C:\Work";

// C:\Workにあるファイルを取得する
string[] strFiles = System.IO.Directory.GetFiles(targetDir);

GetFilesメソッドは拡張子を指定してファイルを取得することもできます。

この場合は、第1引数にはファイルを取得するフォルダーのパスを、第2引数には検索パターン(取得したいファイルの拡張子。例えば”*.txt”)を渡します。

VB版 指定したフォルダーで拡張子を指定してファイルを取得する例

Dim targetDir As String = "C:\Work"

'C\Workにあるテキストファイルを取得する
Dim strTxtFiles() As String = IO.Directory.GetFiles(targetDir, "*.txt")

C#版 指定したフォルダーで拡張子を指定してファイルを取得する例

string targetDir = @"C:\Work";

// C\Workにあるテキストファイルを取得する
string[] strTxtFiles = System.IO.Directory.GetFiles(targetDir, "*.txt");

ここまでに紹介した例では、GetFilesメソッドは指定したフォルダーにあるファイルだけを返し、サブフォルダー以下にあるファイルは取得することができません。

サブフォルダー以下にあるファイルも取得したい場合は、第3引数に検索オプション(SearchOption列挙体)を渡す必要があります。

下記は、検索オプションションを指定して、指定したフォルダーとその中にあるサブフォルダーからファイルを取得する例です。

VB版 検索オプションを指定してファイルを取得する例

Dim targetDir As String = "C:\Work"

'C:\Workとその中のすべてのサブフォルダーにあるファイルを取得する
Dim strAllFiles() As String = IO.Directory.GetFiles(targetDir, "*.*", System.IO.SearchOption.AllDirectories)

C#版 検索オプションを指定してファイルを取得する例

string targetDir = @"C:\Work";

// C:\Workとその中のすべてのサブフォルダーにあるファイルを取得する
string[] strAllFiles = System.IO.Directory.GetFiles(targetDir, "*.*", System.IO.SearchOption.AllDirectories);

[Tips][フォルダー操作] 指定したフォルダーのサブフォルダーを再帰的に取得する

DirectoryクラスのGetDirectoriesメソッドを使用すれば、任意のフォルダーの1階層下のサブフォルダーを取得することが出来ますが、それより深い階層にあるサブディレクトリーは取得することができません。

そこで、GetSubDirectoriesというメソッドを作成したので紹介します。

このメソッドは指定されたサブフォルダーを再帰的に取得します。

第1引数にはサブフォルダーを取得したいフォルダーのパスを、第2引数には結果を格納するList(Of String)型(C#はList<string>型)の変数を渡します。

VB版 GetSubDirectoriesメソッド

''' <summary>
''' 指定したフォルダーにあるサブフォルダを取得する
''' </summary>
''' <param name="DirPath">サブフォルダーを取得するフォルダーのパス</param>
''' <param name="Dirs">取得したサブフォルダー</param>
''' <remarks></remarks&gt>
Private Sub GetSubDirectories(ByVal DirPath As String, ByRef Dirs As List(Of String))
    For Each strDir As String In System.IO.Directory.GetDirectories(DirPath)
        'リストに追加
        Dirs.Add(strDir)
        '再帰でサブフォルダを取得する
        GetSubDirectories(strDir, Dirs)
    Next strDir
End Sub

C#版 GetSubDirectoriesメソッド

/// <summary>
/// 指定したフォルダーにあるサブフォルダを取得する
/// </summary>
/// <param name="targetDir"></param>
/// <param name="Dirs"></param>
private void GetSubDirectories(string targetDir,ref List<string> Dirs)
{
    foreach (string strDir in System.IO.Directory.GetDirectories(targetDir))
    {
        // リストに追加
        Dirs.Add(strDir);
        // 再帰でサブフォルダを取得する
        GetSubDirectories(strDir, ref Dirs);
    }
}

下記はGetSubDirectoriesメソッドの使用例です。

VBの例

Dim targetDir As String = "C:\Work"

Dim strDirs As New List(Of String)
'C:\Work以下のサブフォルダーをすべて取得する
GetSubDirectories(targetDir, strDirs)

C#の例

string targetDir = @"C:\Work";

List<string> strDirs = new List<string>();
// C:\Work以下のサブフォルダーをすべて取得する
GetSubDirectories(targetDir, ref strDirs);