System.IO.Directory.EnumerateDirectories 方法 (String, String, SearchOption)

方法描述

返回指定路径中与搜索模式匹配的目录名称的可枚举集合,还可以搜索子目录。

语法定义(C# System.IO.Directory.EnumerateDirectories 方法 (String, String, SearchOption) 的用法)

public static IEnumerable EnumerateDirectories(
	string path,
	string searchPattern,
	SearchOption searchOption
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
path System-String 要搜索的目录。
searchPattern System-String 要与 path 中的目录名称匹配的搜索字符串。
searchOption System-IO-SearchOption SearchOption 枚举的一个值,指定搜索操作是应仅包含当前目录还是应包含所有子目录。默认值为 TopDirectoryOnly。
返回值 System.Collections.Generic.IEnumerable 由 path 指定的目录中与 searchPattern 和 searchOption 匹配的目录名称的可枚举集合。

提示和注释

在 searchPattern 参数中允许使用以下通配说明符。

通配符

说明

*

零个或多个字符。

?

正好一个字符。

在 path 参数中可以指定相对或绝对路径信息。 相对路径信息被解释为相对于您可以使用 GetCurrentDirectory 方法来确定的当前工作目录。 返回的目录名称的前缀为您在 path 参数中提供的值。 例如,如果在 path 参数中提供相对路径,则返回的目录名称将包含一个相对路径。

EnumerateDirectories 和 GetDirectories 方法不同点在于:当使用 EnumerateDirectories 时,您可以在返回整个集合之前开始枚举名称集合;当您使用 GetDirectories 时,则必须等待整个名称数组都被返回后才能访问数组。 因此,在处理许多文件和目录时,EnumerateDirectories 可能更高效。

不缓存返回的集合;每次在集合上调用 GetEnumerator 都将启动一个新枚举。

System.IO.Directory.EnumerateDirectories 方法 (String, String, SearchOption)例子

它使用 SearchOption 参数指定应在搜索中包括所有子目录。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

class Program
{

    private static void Main(string[] args)
    {
        try
        {
            string dirPath = @"\\archives\2009\reports";

            // LINQ query.
            var dirs = from dir in 
                     Directory.EnumerateDirectories(dirPath, "dv_*",
                     	SearchOption.AllDirectories)
                       select dir;

            // Show results.
            foreach (var dir in dirs)
            {
                // Remove path information from string.
                Console.WriteLine("{0}", 
                    dir.Substring(dir.LastIndexOf("\\") + 1));

            }
            Console.WriteLine("{0} directories found.", 
                dirs.Count().ToString());

            // Optionally create a List collection.
            List workDirs = new List(dirs);
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}

异常

异常 异常描述
ArgumentException
  • path 是零长度字符串、只包含空白或者包含在 GetInvalidPathChars 定义的无效字符。
  • searchPattern 不包含有效模式。
ArgumentNullException
  • path 为 null。
  • searchPattern 为 null。
ArgumentOutOfRangeException searchOption 不是有效的 SearchOption 值。
DirectoryNotFoundException path 无效,比如引用未映射的驱动器。
IOException path 是一个文件名。
PathTooLongException 指定的路径、文件名或者两者都超出了系统定义的最大长度。 例如,在基于 Windows 的平台上,路径必须小于 248 个字符,文件名必须小于 260 个字符。
SecurityException 调用方没有所要求的权限。
UnauthorizedAccessException 调用方没有所要求的权限。

命名空间

namespace: System.IO

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4 .NET Framework Client Profile 受以下版本支持:4

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。