Directory.GetDirectories メソッド

定義

指定した条件を満たすサブディレクトリの名前を返します。

オーバーロード

GetDirectories(String, String, SearchOption)

現在のディレクトリ内で、指定された検索パターンに一致するサブディレクトリの名前 (パスを含む) を返します。オプションで、サブディレクトリを検索対象にすることができます。

GetDirectories(String, String, EnumerationOptions)

指定したディレクトリ内にあり、指定した検索パターンと列挙オプションに一致するサブディレクトリの名前 (パスを含む) を返します。

GetDirectories(String)

指定したディレクトリ内のサブディレクトリの名前 (パスを含む) を返します。

GetDirectories(String, String)

指定したディレクトリ内の指定した検索パターンに一致するサブディレクトリ名 (パスを含む) を返します。

GetDirectories(String, String, SearchOption)

現在のディレクトリ内で、指定された検索パターンに一致するサブディレクトリの名前 (パスを含む) を返します。オプションで、サブディレクトリを検索対象にすることができます。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path, System::String ^ searchPattern, System::IO::SearchOption searchOption);
public static string[] GetDirectories (string path, string searchPattern, System.IO.SearchOption searchOption);
static member GetDirectories : string * string * System.IO.SearchOption -> string[]
Public Shared Function GetDirectories (path As String, searchPattern As String, searchOption As SearchOption) As String()

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

searchPattern
String

path 内のサブディレクトリの名前と照合する検索文字列。 このパラメーターに、有効なリテラルのパスとワイルドカード文字の組み合わせを含めることができますが、正規表現はサポートされていません。

searchOption
SearchOption

検索操作にすべてのサブディレクトリを含めるのか、または現在のディレクトリのみを含めるのかを指定する列挙値の 1 つ。

戻り値

String[]

指定した条件に一致するサブディレクトリの完全名 (パスを含む) の配列。または、ディレクトリが見つからない場合は空の配列。

例外

.NET Frameworkおよび .NET Core バージョンが 2.1 より前の場合: path 長さが 0 の文字列、空白のみを含む、または無効な文字が 1 つ以上含まれています。 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。

  • または - searchPattern には有効なパターンが含まれません。

path または searchPatternnull です。

searchOption は正しい SearchOption 値ではありません。

呼び出し元に、必要なアクセス許可がありません。

指定したパス、ファイル名、またはその両方がシステム定義の最大長を超えています。

path はファイル名です。

指定されたパスが正しくありません (たとえば、マップされていないドライブにあるなど)。

次の例では、パス内の指定した文字で始まるディレクトリの数をカウントします。 最上位のディレクトリのみが検索されます。

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        try
        {
            string[] dirs = Directory.GetDirectories(@"c:\", "p*", SearchOption.TopDirectoryOnly);
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length);
            foreach (string dir in dirs)
            {
                Console.WriteLine(dir);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
open System.IO

try
    let dirs = Directory.GetDirectories(@"c:\", "p*", SearchOption.TopDirectoryOnly)
    printfn $"The number of directories starting with p is {dirs.Length}."
    for dir in dirs do
        printfn $"{dir}"
with e ->
    printfn $"The process failed: {e}"
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        Try
            Dim dirs As String() = Directory.GetDirectories("c:\", "p*", SearchOption.TopDirectoryOnly)
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length)
            Dim dir As String
            For Each dir In dirs
                Console.WriteLine(dir)
            Next
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

注釈

このパラメーターは path 相対パスまたは絶対パス情報を指定でき、大文字と小文字は区別されません。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。 現在の作業ディレクトリを取得するには、次を参照してください GetCurrentDirectory

searchPattern はリテラル文字とワイルドカード文字の組み合わせですが、正規表現はサポートされていません。 で次のワイルドカード指定子を searchPattern使用できます。

ワイルドカード指定子 [一致する]
* (アスタリスク) その位置の 0 個以上の文字。
? (疑問符) その位置の 1 文字だけ。

ワイルドカード以外の文字はリテラル文字です。 たとえば、 searchPattern 文字列 "t" は、文字 "*t" で path 終わるすべての名前を検索します。 文字列 "s" は searchPattern 、文字 "s*" で path 始まるすべての名前を検索します。

searchPattern は、2 つのピリオド ("..") で終わることはできません。また、2 つのピリオド (".") の後 DirectorySeparatorChar に続くも AltDirectorySeparatorCharのも含めることもできます。また、無効な文字を含めることもできます。 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。

メソッドとGetDirectoriesメソッドはEnumerateDirectories次のように異なります。使用EnumerateDirectoriesすると、コレクション全体が返される前に名前のコレクションの列挙を開始できます。使用する場合GetDirectoriesは、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルやディレクトリを操作する場合は、 EnumerateDirectories より効率的な場合があります。

共通 I/O タスクの一覧は、 共通 I/O タスク を参照してください。

こちらもご覧ください

適用対象

GetDirectories(String, String, EnumerationOptions)

指定したディレクトリ内にあり、指定した検索パターンと列挙オプションに一致するサブディレクトリの名前 (パスを含む) を返します。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path, System::String ^ searchPattern, System::IO::EnumerationOptions ^ enumerationOptions);
public static string[] GetDirectories (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);
static member GetDirectories : string * string * System.IO.EnumerationOptions -> string[]
Public Shared Function GetDirectories (path As String, searchPattern As String, enumerationOptions As EnumerationOptions) As String()

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

searchPattern
String

path 内のサブディレクトリの名前と照合する検索文字列。 このパラメーターに、有効なリテラルのパスとワイルドカード文字の組み合わせを含めることができますが、正規表現はサポートされていません。

enumerationOptions
EnumerationOptions

使用する検索と列挙の構成を記述するオブジェクト。

戻り値

String[]

指定したディレクトリ内にあり、検索パターンと列挙オプションに一致するサブディレクトリの完全名 (パスを含む) の配列。または、ディレクトリが見つからない場合は空の配列。

例外

呼び出し元に、必要なアクセス許可がありません。

.NET Frameworkおよび .NET Core バージョンが 2.1 より前の場合: path 長さが 0 の文字列、空白のみを含む、または無効な文字が 1 つ以上含まれています。 GetInvalidPathChars() を使用して、正しくない文字を検出するクエリを実行できます。

  • または - searchPattern には有効なパターンが含まれていません。

path または searchPatternnull です。

指定したパス、ファイル名、またはその両方がシステム定義の最大長を超えています。

path はファイル名です。

指定されたパスが正しくありません (たとえば、マップされていないドライブにあるなど)。

注釈

このメソッドは、指定した検索パターンに一致する指定したディレクトリのすぐ下にあるすべてのサブディレクトリを返します。 指定したディレクトリにサブディレクトリがない場合、またはパラメーターに一致する searchPattern サブディレクトリがない場合、このメソッドは空の配列を返します。 一番上のディレクトリのみが検索されます。 サブディレクトリも検索する場合は、メソッドをGetDirectories(String, String, SearchOption)使用し、パラメーターでsearchOption指定AllDirectoriesします。

searchPattern はリテラル文字とワイルドカード文字の組み合わせですが、正規表現はサポートされていません。 で次のワイルドカード指定子を searchPattern使用できます。

ワイルドカード指定子 [一致する]
* (アスタリスク) その位置の 0 個以上の文字。
? (疑問符) その位置の 1 文字だけ。

ワイルドカード以外の文字はリテラル文字です。 たとえば、 searchPattern 文字列 "t" は、文字 "*t" で path 終わるすべての名前を検索します。 文字列 "s" は searchPattern 、文字 "s*" で path 始まるすべての名前を検索します。

searchPattern は、2 つのピリオド ("..") で終わることはできません。また、2 つのピリオド (".") の後 DirectorySeparatorChar に続くも AltDirectorySeparatorCharのも含めることもできます。また、無効な文字を含めることもできます。 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。

このパラメーターは path 相対パスまたは絶対パス情報を指定でき、大文字と小文字は区別されません。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。 現在の作業ディレクトリを取得するには、次を参照してください GetCurrentDirectory

メソッドとGetDirectoriesメソッドはEnumerateDirectories次のように異なります。使用EnumerateDirectoriesすると、コレクション全体が返される前に名前のコレクションの列挙を開始できます。使用する場合GetDirectoriesは、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルやディレクトリを操作する場合は、 EnumerateDirectories より効率的な場合があります。

共通 I/O タスクの一覧は、 共通 I/O タスク を参照してください。

適用対象

GetDirectories(String)

指定したディレクトリ内のサブディレクトリの名前 (パスを含む) を返します。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path);
public static string[] GetDirectories (string path);
static member GetDirectories : string -> string[]
Public Shared Function GetDirectories (path As String) As String()

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

戻り値

String[]

指定したパス内のサブディレクトリのフル ネーム (パスを含む) の配列。または、ディレクトリが見つからない場合は空の配列。

例外

呼び出し元に、必要なアクセス許可がありません。

.NET Frameworkおよび .NET Core バージョンが 2.1 より前の場合: path 長さが 0 の文字列、空白のみを含む、または無効な文字が 1 つ以上含まれています。 正しくない文字を照会するには、GetInvalidPathChars() メソッドを使用します。

pathnullです。

指定したパス、ファイル名、またはその両方がシステム定義の最大長を超えています。

path はファイル名です。

指定されたパスが正しくありません (たとえば、マップされていないドライブにあるなど)。

次の例では、コマンド ラインでファイル名またはディレクトリ名の配列を取得し、その名前の種類を決定し、適切に処理します。

// For Directory::GetFiles and Directory::GetDirectories
// For File::Exists, Directory::Exists
using namespace System;
using namespace System::IO;
using namespace System::Collections;

// Insert logic for processing found files here.
void ProcessFile( String^ path )
{
   Console::WriteLine( "Processed file '{0}'.", path );
}


// Process all files in the directory passed in, recurse on any directories 
// that are found, and process the files they contain.
void ProcessDirectory( String^ targetDirectory )
{
   
   // Process the list of files found in the directory.
   array<String^>^fileEntries = Directory::GetFiles( targetDirectory );
   IEnumerator^ files = fileEntries->GetEnumerator();
   while ( files->MoveNext() )
   {
      String^ fileName = safe_cast<String^>(files->Current);
      ProcessFile( fileName );
   }

   
   // Recurse into subdirectories of this directory.
   array<String^>^subdirectoryEntries = Directory::GetDirectories( targetDirectory );
   IEnumerator^ dirs = subdirectoryEntries->GetEnumerator();
   while ( dirs->MoveNext() )
   {
      String^ subdirectory = safe_cast<String^>(dirs->Current);
      ProcessDirectory( subdirectory );
   }
}

int main( int argc, char *argv[] )
{
   for ( int i = 1; i < argc; i++ )
   {
      String^ path = gcnew String(argv[ i ]);
      if ( File::Exists( path ) )
      {
         
         // This path is a file
         ProcessFile( path );
      }
      else
      if ( Directory::Exists( path ) )
      {
         
         // This path is a directory
         ProcessDirectory( path );
      }
      else
      {
         Console::WriteLine( "{0} is not a valid file or directory.", path );
      }

   }
}
// For Directory.GetFiles and Directory.GetDirectories
// For File.Exists, Directory.Exists
using System;
using System.IO;
using System.Collections;

public class RecursiveFileProcessor
{
    public static void Main(string[] args)
    {
        foreach(string path in args)
        {
            if(File.Exists(path))
            {
                // This path is a file
                ProcessFile(path);
            }
            else if(Directory.Exists(path))
            {
                // This path is a directory
                ProcessDirectory(path);
            }
            else
            {
                Console.WriteLine("{0} is not a valid file or directory.", path);
            }
        }
    }

    // Process all files in the directory passed in, recurse on any directories
    // that are found, and process the files they contain.
    public static void ProcessDirectory(string targetDirectory)
    {
        // Process the list of files found in the directory.
        string [] fileEntries = Directory.GetFiles(targetDirectory);
        foreach(string fileName in fileEntries)
            ProcessFile(fileName);

        // Recurse into subdirectories of this directory.
        string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach(string subdirectory in subdirectoryEntries)
            ProcessDirectory(subdirectory);
    }

    // Insert logic for processing found files here.
    public static void ProcessFile(string path)
    {
        Console.WriteLine("Processed file '{0}'.", path);	
    }
}
module RecursiveFileProcessor

open System.IO

// Insert logic for processing found files here.
let processFile path =
    printfn $"Processed file '%s{path}'."

// Process all files in the directory passed in, recurse on any directories
// that are found, and process the files they contain.
let rec processDirectory targetDirectory =
    // Process the list of files found in the directory.
    let fileEntries = Directory.GetFiles targetDirectory
    for fileName in fileEntries do
        processFile fileName

    // Recurse into subdirectories of this directory.
    let subdirectoryEntries = Directory.GetDirectories targetDirectory
    for subdirectory in subdirectoryEntries do
        processDirectory subdirectory

[<EntryPoint>]
let main args =
    for path in args do
        if File.Exists path then
            // This path is a file
            processFile path
        elif Directory.Exists path then
            // This path is a directory
            processDirectory path
        else
            printfn $"{path} is not a valid file or directory."
    0
' For Directory.GetFiles and Directory.GetDirectories
' For File.Exists, Directory.Exists 

Imports System.IO
Imports System.Collections

Public Class RecursiveFileProcessor

    Public Overloads Shared Sub Main(ByVal args() As String)
        Dim path As String
        For Each path In args
            If File.Exists(path) Then
                ' This path is a file.
                ProcessFile(path)
            Else
                If Directory.Exists(path) Then
                    ' This path is a directory.
                    ProcessDirectory(path)
                Else
                    Console.WriteLine("{0} is not a valid file or directory.", path)
                End If
            End If
        Next path
    End Sub


    ' Process all files in the directory passed in, recurse on any directories 
    ' that are found, and process the files they contain.
    Public Shared Sub ProcessDirectory(ByVal targetDirectory As String)
        Dim fileEntries As String() = Directory.GetFiles(targetDirectory)
        ' Process the list of files found in the directory.
        Dim fileName As String
        For Each fileName In fileEntries
            ProcessFile(fileName)

        Next fileName
        Dim subdirectoryEntries As String() = Directory.GetDirectories(targetDirectory)
        ' Recurse into subdirectories of this directory.
        Dim subdirectory As String
        For Each subdirectory In subdirectoryEntries
            ProcessDirectory(subdirectory)
        Next subdirectory

    End Sub

    ' Insert logic for processing found files here.
    Public Shared Sub ProcessFile(ByVal path As String)
        Console.WriteLine("Processed file '{0}'.", path)
    End Sub
End Class

注釈

このメソッドは、検索パターンとしてアスタリスク (*) を指定した場合と同じGetDirectories(String, String)であるため、すべてのサブディレクトリが返されます。 サブディレクトリを検索する必要がある場合は、このメソッドを GetDirectories(String, String, SearchOption) 使用して、パラメーターを使用してサブディレクトリの検索を searchOption 指定できます。

メソッドとGetDirectoriesメソッドはEnumerateDirectories次のように異なります。使用EnumerateDirectoriesすると、コレクション全体が返される前に名前のコレクションの列挙を開始できます。使用する場合GetDirectoriesは、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルやディレクトリを操作する場合は、 EnumerateDirectories より効率的な場合があります。

このパラメーターでは path 、相対パスまたは絶対パス情報を指定できます。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。 現在の作業ディレクトリを取得するには、次を参照してください GetCurrentDirectory

このメソッドによって返される名前には、次に示すディレクトリ情報がプレフィックスとして path付けられます。

パラメーターでは path 大文字と小文字は区別されません。

共通 I/O タスクの一覧は、 共通 I/O タスク を参照してください。

こちらもご覧ください

適用対象

GetDirectories(String, String)

指定したディレクトリ内の指定した検索パターンに一致するサブディレクトリ名 (パスを含む) を返します。

public:
 static cli::array <System::String ^> ^ GetDirectories(System::String ^ path, System::String ^ searchPattern);
public static string[] GetDirectories (string path, string searchPattern);
static member GetDirectories : string * string -> string[]
Public Shared Function GetDirectories (path As String, searchPattern As String) As String()

パラメーター

path
String

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

searchPattern
String

path 内のサブディレクトリの名前と照合する検索文字列。 このパラメーターに、有効なリテラルのパスとワイルドカード文字の組み合わせを含めることができますが、正規表現はサポートされていません。

戻り値

String[]

指定したディレクトリ内の検索パターンに一致するサブディレクトリの完全名 (パスを含む) の配列。または、ディレクトリが見つからない場合は空の配列。

例外

呼び出し元に、必要なアクセス許可がありません。

.NET Frameworkおよび .NET Core バージョンが 2.1 より前の場合: path 長さが 0 の文字列、空白のみを含む、または無効な文字が 1 つ以上含まれています。 GetInvalidPathChars() を使用して、正しくない文字を検出するクエリを実行できます。

  • または - searchPattern には有効なパターンが含まれていません。

path または searchPatternnull です。

指定したパス、ファイル名、またはその両方がシステム定義の最大長を超えています。

path はファイル名です。

指定されたパスが正しくありません (たとえば、マップされていないドライブにあるなど)。

次の例では、指定した文字で始まるパス内のディレクトリの数をカウントします。

using namespace System;
using namespace System::IO;
int main()
{
   try
   {
      
      // Only get subdirectories that begin with the letter "p."
      array<String^>^dirs = Directory::GetDirectories( "c:\\", "p*" );
      Console::WriteLine( "The number of directories starting with p is {0}.", dirs->Length );
      Collections::IEnumerator^ myEnum = dirs->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Console::WriteLine( myEnum->Current );
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }

}
using System;
using System.IO;

class Test
{
    public static void Main()
    {
        try
        {
            // Only get subdirectories that begin with the letter "p."
            string[] dirs = Directory.GetDirectories(@"c:\", "p*");
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length);
            foreach (string dir in dirs)
            {
                Console.WriteLine(dir);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
open System.IO

try
    // Only get subdirectories that begin with the letter "p."
    let dirs = Directory.GetDirectories(@"c:\", "p*")
    printfn $"The number of directories starting with p is {dirs.Length}."
    for dir in dirs do
        printfn $"{dir}"
with e ->
    printfn $"The process failed: {e}"
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        Try
            ' Only get subdirectories that begin with the letter "p."
            Dim dirs As String() = Directory.GetDirectories("c:\", "p*")
            Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length)
            Dim dir As String
            For Each dir In dirs
                Console.WriteLine(dir)
            Next
        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

注釈

このメソッドは、指定した検索パターンに一致する指定したディレクトリのすぐ下にあるすべてのサブディレクトリを返します。 指定したディレクトリにサブディレクトリがない場合、またはパラメーターに一致する searchPattern サブディレクトリがない場合、このメソッドは空の配列を返します。 一番上のディレクトリのみが検索されます。 サブディレクトリも検索する場合は、メソッドをGetDirectories(String, String, SearchOption)使用し、パラメーターでsearchOption指定AllDirectoriesします。

searchPattern はリテラル文字とワイルドカード文字の組み合わせですが、正規表現はサポートされていません。 で次のワイルドカード指定子を searchPattern使用できます。

ワイルドカード指定子 [一致する]
* (アスタリスク) その位置の 0 個以上の文字。
? (疑問符) その位置の 1 文字だけ。

ワイルドカード以外の文字はリテラル文字です。 たとえば、 searchPattern 文字列 "t" は、文字 "*t" で path 終わるすべての名前を検索します。 文字列 "s" は searchPattern 、文字 "s*" で path 始まるすべての名前を検索します。

searchPattern は、2 つのピリオド ("..") で終わることはできません。また、2 つのピリオド (".") の後 DirectorySeparatorChar に続くも AltDirectorySeparatorCharのも含めることもできます。また、無効な文字を含めることもできます。 正しくない文字を照会するには、GetInvalidPathChars メソッドを使用します。

このパラメーターは path 相対パスまたは絶対パス情報を指定でき、大文字と小文字は区別されません。 相対パス情報は、現在の作業ディレクトリに対する相対パスとして解釈されます。 現在の作業ディレクトリを取得するには、次を参照してください GetCurrentDirectory

メソッドとGetDirectoriesメソッドはEnumerateDirectories次のように異なります。使用EnumerateDirectoriesすると、コレクション全体が返される前に名前のコレクションの列挙を開始できます。使用する場合GetDirectoriesは、配列にアクセスする前に、名前の配列全体が返されるのを待つ必要があります。 そのため、多くのファイルやディレクトリを操作する場合は、 EnumerateDirectories より効率的な場合があります。

共通 I/O タスクの一覧は、 共通 I/O タスク を参照してください。

こちらもご覧ください

適用対象